@opensaas/stack-cli 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +141 -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/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/package.json +9 -9
- package/src/commands/__snapshots__/generate.test.ts.snap +92 -21
- package/src/commands/generate.ts +8 -19
- 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/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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/generator/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAkC,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/generator/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAkC,MAAM,sBAAsB,CAAA;AA4c1F;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CA0D5D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAU3E"}
|
package/dist/generator/types.js
CHANGED
|
@@ -33,22 +33,79 @@ function isFieldOptional(field) {
|
|
|
33
33
|
return true;
|
|
34
34
|
}
|
|
35
35
|
/**
|
|
36
|
-
* Generate
|
|
36
|
+
* Generate virtual fields type - only contains virtual fields
|
|
37
|
+
* This is intersected with Prisma's GetPayload to add virtual fields to query results
|
|
37
38
|
*/
|
|
38
|
-
function
|
|
39
|
+
function generateVirtualFieldsType(listName, fields) {
|
|
39
40
|
const lines = [];
|
|
40
|
-
|
|
41
|
+
const virtualFields = Object.entries(fields).filter(([_, config]) => config.type === 'virtual');
|
|
42
|
+
lines.push(`/**`);
|
|
43
|
+
lines.push(` * Virtual fields for ${listName} - computed fields not in database`);
|
|
44
|
+
lines.push(` * These are added to query results via resolveOutput hooks`);
|
|
45
|
+
lines.push(` */`);
|
|
46
|
+
lines.push(`export type ${listName}VirtualFields = {`);
|
|
47
|
+
for (const [fieldName, fieldConfig] of virtualFields) {
|
|
48
|
+
const tsType = mapFieldTypeToTypeScript(fieldConfig);
|
|
49
|
+
if (!tsType)
|
|
50
|
+
continue;
|
|
51
|
+
const optional = isFieldOptional(fieldConfig);
|
|
52
|
+
const nullability = optional ? ' | null' : '';
|
|
53
|
+
lines.push(` ${fieldName}: ${tsType}${nullability}`);
|
|
54
|
+
}
|
|
55
|
+
// If no virtual fields, make it an empty object
|
|
56
|
+
if (virtualFields.length === 0) {
|
|
57
|
+
lines.push(' // No virtual fields defined');
|
|
58
|
+
}
|
|
59
|
+
lines.push('}');
|
|
60
|
+
return lines.join('\n');
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Generate transformed fields type - fields with resultExtension transformations
|
|
64
|
+
* This replaces Prisma's base types with transformed types (e.g., string -> HashedPassword)
|
|
65
|
+
*/
|
|
66
|
+
function generateTransformedFieldsType(listName, fields) {
|
|
67
|
+
const lines = [];
|
|
68
|
+
const transformedFields = Object.entries(fields).filter(([_, config]) => config.resultExtension);
|
|
69
|
+
lines.push(`/**`);
|
|
70
|
+
lines.push(` * Transformed fields for ${listName} - fields with resultExtension transformations`);
|
|
71
|
+
lines.push(` * These override Prisma's base types with transformed types via result extensions`);
|
|
72
|
+
lines.push(` */`);
|
|
73
|
+
lines.push(`export type ${listName}TransformedFields = {`);
|
|
74
|
+
for (const [fieldName, fieldConfig] of transformedFields) {
|
|
75
|
+
if (fieldConfig.resultExtension) {
|
|
76
|
+
const optional = isFieldOptional(fieldConfig);
|
|
77
|
+
const nullability = optional ? ' | undefined' : '';
|
|
78
|
+
lines.push(` ${fieldName}: ${fieldConfig.resultExtension.outputType}${nullability}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// If no transformed fields, make it an empty object
|
|
82
|
+
if (transformedFields.length === 0) {
|
|
83
|
+
lines.push(' // No transformed fields defined');
|
|
84
|
+
}
|
|
85
|
+
lines.push('}');
|
|
86
|
+
return lines.join('\n');
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Generate TypeScript Output type for a model (includes virtual fields)
|
|
90
|
+
* This is kept for backwards compatibility but CustomDB uses Prisma's GetPayload + VirtualFields
|
|
91
|
+
*/
|
|
92
|
+
function generateModelOutputType(listName, fields) {
|
|
93
|
+
const lines = [];
|
|
94
|
+
lines.push(`export type ${listName}Output = {`);
|
|
41
95
|
lines.push(' id: string');
|
|
42
96
|
for (const [fieldName, fieldConfig] of Object.entries(fields)) {
|
|
97
|
+
// Skip virtual fields - they're in VirtualFields type
|
|
98
|
+
if (fieldConfig.type === 'virtual')
|
|
99
|
+
continue;
|
|
43
100
|
if (fieldConfig.type === 'relationship') {
|
|
44
101
|
const relField = fieldConfig;
|
|
45
102
|
const [targetList] = relField.ref.split('.');
|
|
46
103
|
if (relField.many) {
|
|
47
|
-
lines.push(` ${fieldName}
|
|
104
|
+
lines.push(` ${fieldName}?: ${targetList}Output[]`); // Optional since only present with include
|
|
48
105
|
}
|
|
49
106
|
else {
|
|
50
107
|
lines.push(` ${fieldName}Id: string | null`);
|
|
51
|
-
lines.push(` ${fieldName}
|
|
108
|
+
lines.push(` ${fieldName}?: ${targetList}Output | null`); // Optional since only present with include
|
|
52
109
|
}
|
|
53
110
|
}
|
|
54
111
|
else {
|
|
@@ -62,9 +119,15 @@ function generateModelType(listName, fields) {
|
|
|
62
119
|
}
|
|
63
120
|
lines.push(' createdAt: Date');
|
|
64
121
|
lines.push(' updatedAt: Date');
|
|
65
|
-
lines.push('}');
|
|
122
|
+
lines.push('} & ' + listName + 'VirtualFields'); // Include virtual fields
|
|
66
123
|
return lines.join('\n');
|
|
67
124
|
}
|
|
125
|
+
/**
|
|
126
|
+
* Generate convenience type alias (List = ListOutput)
|
|
127
|
+
*/
|
|
128
|
+
function generateModelTypeAlias(listName) {
|
|
129
|
+
return `export type ${listName} = ${listName}Output`;
|
|
130
|
+
}
|
|
68
131
|
/**
|
|
69
132
|
* Generate CreateInput type
|
|
70
133
|
*/
|
|
@@ -72,6 +135,11 @@ function generateCreateInputType(listName, fields) {
|
|
|
72
135
|
const lines = [];
|
|
73
136
|
lines.push(`export type ${listName}CreateInput = {`);
|
|
74
137
|
for (const [fieldName, fieldConfig] of Object.entries(fields)) {
|
|
138
|
+
// Skip virtual fields - they don't accept input in create operations
|
|
139
|
+
// Virtual fields with resolveInput hooks handle side effects but don't store data
|
|
140
|
+
if (fieldConfig.virtual) {
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
75
143
|
if (fieldConfig.type === 'relationship') {
|
|
76
144
|
const relField = fieldConfig;
|
|
77
145
|
if (relField.many) {
|
|
@@ -100,6 +168,11 @@ function generateUpdateInputType(listName, fields) {
|
|
|
100
168
|
const lines = [];
|
|
101
169
|
lines.push(`export type ${listName}UpdateInput = {`);
|
|
102
170
|
for (const [fieldName, fieldConfig] of Object.entries(fields)) {
|
|
171
|
+
// Virtual fields with resolveInput hooks can accept input for side effects
|
|
172
|
+
// but we still skip them in the input type since they don't store data
|
|
173
|
+
if (fieldConfig.virtual) {
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
103
176
|
if (fieldConfig.type === 'relationship') {
|
|
104
177
|
const relField = fieldConfig;
|
|
105
178
|
if (relField.many) {
|
|
@@ -190,19 +263,69 @@ function generateHookTypes(listName) {
|
|
|
190
263
|
return lines.join('\n');
|
|
191
264
|
}
|
|
192
265
|
/**
|
|
193
|
-
* Generate
|
|
266
|
+
* Generate custom DB interface that uses Prisma's conditional types with virtual and transformed fields
|
|
267
|
+
* This leverages Prisma's GetPayload utility to get correct types based on select/include
|
|
194
268
|
*/
|
|
195
|
-
function
|
|
269
|
+
function generateCustomDBType(config) {
|
|
196
270
|
const lines = [];
|
|
197
|
-
|
|
198
|
-
|
|
271
|
+
// Generate list of db keys to omit from AccessControlledDB
|
|
272
|
+
const dbKeys = Object.keys(config.lists).map((listName) => {
|
|
273
|
+
const dbKey = listName.charAt(0).toLowerCase() + listName.slice(1);
|
|
274
|
+
return `'${dbKey}'`;
|
|
275
|
+
});
|
|
276
|
+
lines.push('/**');
|
|
277
|
+
lines.push(" * Custom DB type that uses Prisma's conditional types with virtual and transformed field support");
|
|
278
|
+
lines.push(' * Types change based on select/include - relationships only present when explicitly included');
|
|
279
|
+
lines.push(' * Virtual fields and transformed fields are added to the base model type');
|
|
280
|
+
lines.push(' */');
|
|
281
|
+
lines.push('export type CustomDB = Omit<AccessControlledDB<PrismaClient>, ');
|
|
282
|
+
lines.push(` ${dbKeys.join(' | ')}`);
|
|
283
|
+
lines.push('> & {');
|
|
284
|
+
// For each list, create strongly-typed methods using Prisma's conditional types
|
|
285
|
+
for (const listName of Object.keys(config.lists)) {
|
|
286
|
+
const dbKey = listName.charAt(0).toLowerCase() + listName.slice(1); // camelCase
|
|
287
|
+
lines.push(` ${dbKey}: {`);
|
|
288
|
+
// findUnique - generic to preserve Prisma's conditional return type
|
|
289
|
+
lines.push(` findUnique: <T extends Prisma.${listName}FindUniqueArgs>(`);
|
|
290
|
+
lines.push(` args: Prisma.SelectSubset<T, Prisma.${listName}FindUniqueArgs>`);
|
|
291
|
+
lines.push(` ) => Promise<(Omit<Prisma.${listName}GetPayload<T>, keyof ${listName}TransformedFields> & ${listName}TransformedFields & ${listName}VirtualFields) | null>`);
|
|
292
|
+
// findMany - generic to preserve Prisma's conditional return type
|
|
293
|
+
lines.push(` findMany: <T extends Prisma.${listName}FindManyArgs>(`);
|
|
294
|
+
lines.push(` args?: Prisma.SelectSubset<T, Prisma.${listName}FindManyArgs>`);
|
|
295
|
+
lines.push(` ) => Promise<Array<Omit<Prisma.${listName}GetPayload<T>, keyof ${listName}TransformedFields> & ${listName}TransformedFields & ${listName}VirtualFields>>`);
|
|
296
|
+
// create - generic to preserve Prisma's conditional return type
|
|
297
|
+
lines.push(` create: <T extends Prisma.${listName}CreateArgs>(`);
|
|
298
|
+
lines.push(` args: Prisma.SelectSubset<T, Prisma.${listName}CreateArgs>`);
|
|
299
|
+
lines.push(` ) => Promise<Omit<Prisma.${listName}GetPayload<T>, keyof ${listName}TransformedFields> & ${listName}TransformedFields & ${listName}VirtualFields>`);
|
|
300
|
+
// update - generic to preserve Prisma's conditional return type
|
|
301
|
+
lines.push(` update: <T extends Prisma.${listName}UpdateArgs>(`);
|
|
302
|
+
lines.push(` args: Prisma.SelectSubset<T, Prisma.${listName}UpdateArgs>`);
|
|
303
|
+
lines.push(` ) => Promise<(Omit<Prisma.${listName}GetPayload<T>, keyof ${listName}TransformedFields> & ${listName}TransformedFields & ${listName}VirtualFields) | null>`);
|
|
304
|
+
// delete - generic to preserve Prisma's conditional return type
|
|
305
|
+
lines.push(` delete: <T extends Prisma.${listName}DeleteArgs>(`);
|
|
306
|
+
lines.push(` args: Prisma.SelectSubset<T, Prisma.${listName}DeleteArgs>`);
|
|
307
|
+
lines.push(` ) => Promise<(Omit<Prisma.${listName}GetPayload<T>, keyof ${listName}TransformedFields> & ${listName}TransformedFields & ${listName}VirtualFields) | null>`);
|
|
308
|
+
// count - no changes to return type
|
|
309
|
+
lines.push(` count: (args?: Prisma.${listName}CountArgs) => Promise<number>`);
|
|
310
|
+
lines.push(` }`);
|
|
311
|
+
}
|
|
312
|
+
lines.push('}');
|
|
313
|
+
return lines.join('\n');
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Generate Context type that is compatible with AccessContext
|
|
317
|
+
*/
|
|
318
|
+
function generateContextType(_config) {
|
|
319
|
+
const lines = [];
|
|
320
|
+
lines.push('/**');
|
|
321
|
+
lines.push(' * Context type compatible with AccessContext but with CustomDB for virtual field typing');
|
|
322
|
+
lines.push(' * Extends AccessContext and overrides db property to include virtual fields in output types');
|
|
323
|
+
lines.push(' */');
|
|
324
|
+
lines.push("export type Context<TSession extends OpensaasSession = OpensaasSession> = Omit<AccessContext<PrismaClient>, 'db' | 'session'> & {");
|
|
325
|
+
lines.push(' db: CustomDB');
|
|
199
326
|
lines.push(' session: TSession');
|
|
200
|
-
lines.push(' prisma: PrismaClient');
|
|
201
|
-
lines.push(' storage: StorageUtils');
|
|
202
|
-
lines.push(' plugins: PluginServices');
|
|
203
327
|
lines.push(' serverAction: (props: ServerActionProps) => Promise<unknown>');
|
|
204
328
|
lines.push(' sudo: () => Context<TSession>');
|
|
205
|
-
lines.push(' _isSudo: boolean');
|
|
206
329
|
lines.push('}');
|
|
207
330
|
return lines.join('\n');
|
|
208
331
|
}
|
|
@@ -258,7 +381,7 @@ export function generateTypes(config) {
|
|
|
258
381
|
lines.push('');
|
|
259
382
|
// Add necessary imports
|
|
260
383
|
// Use alias for Session to avoid conflicts if user has a list named "Session"
|
|
261
|
-
lines.push("import type { Session as OpensaasSession, StorageUtils, ServerActionProps, AccessControlledDB } from '@opensaas/stack-core'");
|
|
384
|
+
lines.push("import type { Session as OpensaasSession, StorageUtils, ServerActionProps, AccessControlledDB, AccessContext } from '@opensaas/stack-core'");
|
|
262
385
|
lines.push("import type { PrismaClient, Prisma } from './prisma-client/client'");
|
|
263
386
|
lines.push("import type { PluginServices } from './plugin-types'");
|
|
264
387
|
// Add field-specific imports
|
|
@@ -271,7 +394,15 @@ export function generateTypes(config) {
|
|
|
271
394
|
lines.push('');
|
|
272
395
|
// Generate types for each list
|
|
273
396
|
for (const [listName, listConfig] of Object.entries(config.lists)) {
|
|
274
|
-
|
|
397
|
+
// Generate VirtualFields type first (needed by Output type and CustomDB)
|
|
398
|
+
lines.push(generateVirtualFieldsType(listName, listConfig.fields));
|
|
399
|
+
lines.push('');
|
|
400
|
+
// Generate TransformedFields type (needed by CustomDB)
|
|
401
|
+
lines.push(generateTransformedFieldsType(listName, listConfig.fields));
|
|
402
|
+
lines.push('');
|
|
403
|
+
lines.push(generateModelOutputType(listName, listConfig.fields));
|
|
404
|
+
lines.push('');
|
|
405
|
+
lines.push(generateModelTypeAlias(listName));
|
|
275
406
|
lines.push('');
|
|
276
407
|
lines.push(generateCreateInputType(listName, listConfig.fields));
|
|
277
408
|
lines.push('');
|
|
@@ -282,8 +413,11 @@ export function generateTypes(config) {
|
|
|
282
413
|
lines.push(generateHookTypes(listName));
|
|
283
414
|
lines.push('');
|
|
284
415
|
}
|
|
416
|
+
// Generate CustomDB interface
|
|
417
|
+
lines.push(generateCustomDBType(config));
|
|
418
|
+
lines.push('');
|
|
285
419
|
// Generate Context type
|
|
286
|
-
lines.push(generateContextType());
|
|
420
|
+
lines.push(generateContextType(config));
|
|
287
421
|
return lines.join('\n');
|
|
288
422
|
}
|
|
289
423
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/generator/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/generator/types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAE5B;;GAEG;AACH,SAAS,wBAAwB,CAAC,KAAkB;IAClD,uCAAuC;IACvC,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QAClC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,yDAAyD;IACzD,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,KAAK,CAAC,iBAAiB,EAAE,CAAA;QACxC,OAAO,MAAM,CAAC,IAAI,CAAA;IACpB,CAAC;IAED,gDAAgD;IAChD,MAAM,IAAI,KAAK,CAAC,eAAe,KAAK,CAAC,IAAI,+CAA+C,CAAC,CAAA;AAC3F,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,KAAkB;IACzC,oCAAoC;IACpC,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QAClC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,yDAAyD;IACzD,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,KAAK,CAAC,iBAAiB,EAAE,CAAA;QACxC,OAAO,MAAM,CAAC,QAAQ,CAAA;IACxB,CAAC;IAED,4BAA4B;IAC5B,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;GAGG;AACH,SAAS,yBAAyB,CAAC,QAAgB,EAAE,MAAmC;IACtF,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAA;IAE/F,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjB,KAAK,CAAC,IAAI,CAAC,yBAAyB,QAAQ,oCAAoC,CAAC,CAAA;IACjF,KAAK,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAA;IACzE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjB,KAAK,CAAC,IAAI,CAAC,eAAe,QAAQ,mBAAmB,CAAC,CAAA;IAEtD,KAAK,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,aAAa,EAAE,CAAC;QACrD,MAAM,MAAM,GAAG,wBAAwB,CAAC,WAAW,CAAC,CAAA;QACpD,IAAI,CAAC,MAAM;YAAE,SAAQ;QAErB,MAAM,QAAQ,GAAG,eAAe,CAAC,WAAW,CAAC,CAAA;QAC7C,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAA;QAC7C,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,KAAK,MAAM,GAAG,WAAW,EAAE,CAAC,CAAA;IACvD,CAAC;IAED,gDAAgD;IAChD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAA;IAC9C,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED;;;GAGG;AACH,SAAS,6BAA6B,CACpC,QAAgB,EAChB,MAAmC;IAEnC,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,MAAM,iBAAiB,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,CAAA;IAEhG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjB,KAAK,CAAC,IAAI,CAAC,6BAA6B,QAAQ,gDAAgD,CAAC,CAAA;IACjG,KAAK,CAAC,IAAI,CAAC,oFAAoF,CAAC,CAAA;IAChG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjB,KAAK,CAAC,IAAI,CAAC,eAAe,QAAQ,uBAAuB,CAAC,CAAA;IAE1D,KAAK,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,iBAAiB,EAAE,CAAC;QACzD,IAAI,WAAW,CAAC,eAAe,EAAE,CAAC;YAChC,MAAM,QAAQ,GAAG,eAAe,CAAC,WAAW,CAAC,CAAA;YAC7C,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAA;YAClD,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,KAAK,WAAW,CAAC,eAAe,CAAC,UAAU,GAAG,WAAW,EAAE,CAAC,CAAA;QACvF,CAAC;IACH,CAAC;IAED,oDAAoD;IACpD,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAA;IAClD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED;;;GAGG;AACH,SAAS,uBAAuB,CAAC,QAAgB,EAAE,MAAmC;IACpF,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,KAAK,CAAC,IAAI,CAAC,eAAe,QAAQ,YAAY,CAAC,CAAA;IAC/C,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IAE1B,KAAK,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9D,sDAAsD;QACtD,IAAI,WAAW,CAAC,IAAI,KAAK,SAAS;YAAE,SAAQ;QAE5C,IAAI,WAAW,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YACxC,MAAM,QAAQ,GAAG,WAAgC,CAAA;YACjD,MAAM,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAE5C,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAClB,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,MAAM,UAAU,UAAU,CAAC,CAAA,CAAC,2CAA2C;YAClG,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,mBAAmB,CAAC,CAAA;gBAC7C,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,MAAM,UAAU,eAAe,CAAC,CAAA,CAAC,2CAA2C;YACvG,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,wBAAwB,CAAC,WAAW,CAAC,CAAA;YACpD,IAAI,CAAC,MAAM;gBAAE,SAAQ,CAAC,2BAA2B;YAEjD,MAAM,QAAQ,GAAG,eAAe,CAAC,WAAW,CAAC,CAAA;YAC7C,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAA;YAC7C,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,KAAK,MAAM,GAAG,WAAW,EAAE,CAAC,CAAA;QACvD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;IAC/B,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;IAC/B,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,GAAG,eAAe,CAAC,CAAA,CAAC,yBAAyB;IAEzE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAAC,QAAgB;IAC9C,OAAO,eAAe,QAAQ,MAAM,QAAQ,QAAQ,CAAA;AACtD,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAAC,QAAgB,EAAE,MAAmC;IACpF,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,KAAK,CAAC,IAAI,CAAC,eAAe,QAAQ,iBAAiB,CAAC,CAAA;IAEpD,KAAK,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9D,qEAAqE;QACrE,kFAAkF;QAClF,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;YACxB,SAAQ;QACV,CAAC;QAED,IAAI,WAAW,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YACxC,MAAM,QAAQ,GAAG,WAAgC,CAAA;YAEjD,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAClB,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,uCAAuC,CAAC,CAAA;YACnE,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,gCAAgC,CAAC,CAAA;YAC5D,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,wBAAwB,CAAC,WAAW,CAAC,CAAA;YACpD,IAAI,CAAC,MAAM;gBAAE,SAAQ,CAAC,2BAA2B;YAEjD,MAAM,QAAQ,GAAG,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAA;YAC3E,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAA;YACpC,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,GAAG,QAAQ,KAAK,MAAM,EAAE,CAAC,CAAA;QACpD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAAC,QAAgB,EAAE,MAAmC;IACpF,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,KAAK,CAAC,IAAI,CAAC,eAAe,QAAQ,iBAAiB,CAAC,CAAA;IAEpD,KAAK,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9D,2EAA2E;QAC3E,uEAAuE;QACvE,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;YACxB,SAAQ;QACV,CAAC;QAED,IAAI,WAAW,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YACxC,MAAM,QAAQ,GAAG,WAAgC,CAAA;YAEjD,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAClB,KAAK,CAAC,IAAI,CACR,KAAK,SAAS,0EAA0E,CACzF,CAAA;YACH,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,uDAAuD,CAAC,CAAA;YACnF,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,wBAAwB,CAAC,WAAW,CAAC,CAAA;YACpD,IAAI,CAAC,MAAM;gBAAE,SAAQ,CAAC,2BAA2B;YAEjD,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,MAAM,MAAM,EAAE,CAAC,CAAA;QAC1C,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAAC,QAAgB,EAAE,MAAmC;IACnF,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,KAAK,CAAC,IAAI,CAAC,eAAe,QAAQ,gBAAgB,CAAC,CAAA;IACnD,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;IAC3B,KAAK,CAAC,IAAI,CAAC,gBAAgB,GAAG,QAAQ,GAAG,aAAa,CAAC,CAAA;IACvD,KAAK,CAAC,IAAI,CAAC,eAAe,GAAG,QAAQ,GAAG,aAAa,CAAC,CAAA;IACtD,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,QAAQ,GAAG,YAAY,CAAC,CAAA;IAEhD,KAAK,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9D,IAAI,WAAW,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YACxC,SAAQ,CAAC,eAAe;QAC1B,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,wBAAwB,CAAC,WAAW,CAAC,CAAA;YACpD,IAAI,CAAC,MAAM;gBAAE,SAAQ,CAAC,2BAA2B;YAEjD,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,iBAAiB,MAAM,WAAW,MAAM,IAAI,CAAC,CAAA;QACxE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,QAAgB;IACzC,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjB,KAAK,CAAC,IAAI,CAAC,qBAAqB,QAAQ,OAAO,CAAC,CAAA;IAChD,KAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAA;IACrE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjB,KAAK,CAAC,IAAI,CAAC,eAAe,QAAQ,WAAW,CAAC,CAAA;IAC9C,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAA;IACrC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACrB,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAA;IACzC,KAAK,CAAC,IAAI,CAAC,gCAAgC,QAAQ,aAAa,CAAC,CAAA;IACjE,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAA;IACrC,KAAK,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAA;IAC3E,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACrB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACrB,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAA;IACzC,KAAK,CAAC,IAAI,CAAC,gCAAgC,QAAQ,aAAa,CAAC,CAAA;IACjE,KAAK,CAAC,IAAI,CAAC,iBAAiB,QAAQ,EAAE,CAAC,CAAA;IACvC,KAAK,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAA;IAC3E,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACrB,KAAK,CAAC,IAAI,CAAC,yBAAyB,QAAQ,wBAAwB,QAAQ,cAAc,CAAC,CAAA;IAC3F,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAA;IACxC,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAA;IAChD,KAAK,CAAC,IAAI,CAAC,4BAA4B,QAAQ,wBAAwB,QAAQ,aAAa,CAAC,CAAA;IAC7F,KAAK,CAAC,IAAI,CAAC,cAAc,QAAQ,EAAE,CAAC,CAAA;IACpC,KAAK,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAA;IACvE,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAA;IAC3D,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;IACnC,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAA;IAC1C,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAA;IAC3D,KAAK,CAAC,IAAI,CAAC,6BAA6B,QAAQ,wBAAwB,QAAQ,aAAa,CAAC,CAAA;IAC9F,KAAK,CAAC,IAAI,CAAC,cAAc,QAAQ,EAAE,CAAC,CAAA;IACpC,KAAK,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAA;IACvE,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;IACnC,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAA;IACzC,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAA;IAC3D,KAAK,CAAC,IAAI,CAAC,6BAA6B,QAAQ,wBAAwB,QAAQ,aAAa,CAAC,CAAA;IAC9F,KAAK,CAAC,IAAI,CAAC,cAAc,QAAQ,EAAE,CAAC,CAAA;IACpC,KAAK,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAA;IACvE,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;IACnC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED;;;GAGG;AACH,SAAS,oBAAoB,CAAC,MAAsB;IAClD,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,2DAA2D;IAC3D,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QACxD,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAClE,OAAO,IAAI,KAAK,GAAG,CAAA;IACrB,CAAC,CAAC,CAAA;IAEF,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjB,KAAK,CAAC,IAAI,CACR,mGAAmG,CACpG,CAAA;IACD,KAAK,CAAC,IAAI,CACR,+FAA+F,CAChG,CAAA;IACD,KAAK,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAA;IACvF,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjB,KAAK,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAA;IAC5E,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IACrC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAEnB,gFAAgF;IAChF,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA,CAAC,YAAY;QAE/E,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,CAAA;QAE3B,oEAAoE;QACpE,KAAK,CAAC,IAAI,CAAC,qCAAqC,QAAQ,kBAAkB,CAAC,CAAA;QAC3E,KAAK,CAAC,IAAI,CAAC,6CAA6C,QAAQ,iBAAiB,CAAC,CAAA;QAClF,KAAK,CAAC,IAAI,CACR,iCAAiC,QAAQ,wBAAwB,QAAQ,wBAAwB,QAAQ,uBAAuB,QAAQ,wBAAwB,CACjK,CAAA;QAED,kEAAkE;QAClE,KAAK,CAAC,IAAI,CAAC,mCAAmC,QAAQ,gBAAgB,CAAC,CAAA;QACvE,KAAK,CAAC,IAAI,CAAC,8CAA8C,QAAQ,eAAe,CAAC,CAAA;QACjF,KAAK,CAAC,IAAI,CACR,sCAAsC,QAAQ,wBAAwB,QAAQ,wBAAwB,QAAQ,uBAAuB,QAAQ,iBAAiB,CAC/J,CAAA;QAED,gEAAgE;QAChE,KAAK,CAAC,IAAI,CAAC,iCAAiC,QAAQ,cAAc,CAAC,CAAA;QACnE,KAAK,CAAC,IAAI,CAAC,6CAA6C,QAAQ,aAAa,CAAC,CAAA;QAC9E,KAAK,CAAC,IAAI,CACR,gCAAgC,QAAQ,wBAAwB,QAAQ,wBAAwB,QAAQ,uBAAuB,QAAQ,gBAAgB,CACxJ,CAAA;QAED,gEAAgE;QAChE,KAAK,CAAC,IAAI,CAAC,iCAAiC,QAAQ,cAAc,CAAC,CAAA;QACnE,KAAK,CAAC,IAAI,CAAC,6CAA6C,QAAQ,aAAa,CAAC,CAAA;QAC9E,KAAK,CAAC,IAAI,CACR,iCAAiC,QAAQ,wBAAwB,QAAQ,wBAAwB,QAAQ,uBAAuB,QAAQ,wBAAwB,CACjK,CAAA;QAED,gEAAgE;QAChE,KAAK,CAAC,IAAI,CAAC,iCAAiC,QAAQ,cAAc,CAAC,CAAA;QACnE,KAAK,CAAC,IAAI,CAAC,6CAA6C,QAAQ,aAAa,CAAC,CAAA;QAC9E,KAAK,CAAC,IAAI,CACR,iCAAiC,QAAQ,wBAAwB,QAAQ,wBAAwB,QAAQ,uBAAuB,QAAQ,wBAAwB,CACjK,CAAA;QAED,oCAAoC;QACpC,KAAK,CAAC,IAAI,CAAC,6BAA6B,QAAQ,+BAA+B,CAAC,CAAA;QAEhF,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACnB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,OAAuB;IAClD,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjB,KAAK,CAAC,IAAI,CACR,0FAA0F,CAC3F,CAAA;IACD,KAAK,CAAC,IAAI,CACR,8FAA8F,CAC/F,CAAA;IACD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjB,KAAK,CAAC,IAAI,CACR,mIAAmI,CACpI,CAAA;IACD,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;IAC5B,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAA;IACjC,KAAK,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAA;IAC5E,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAA;IAC7C,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,MAAsB;IAKjD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAqD,CAAA;IAE/E,uCAAuC;IACvC,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACrD,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3D,kCAAkC;YAClC,IAAI,WAAW,CAAC,oBAAoB,EAAE,CAAC;gBACrC,MAAM,OAAO,GAAG,WAAW,CAAC,oBAAoB,EAAE,CAAA;gBAClD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;oBAC1B,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;oBACzC,IAAI,QAAQ,EAAE,CAAC;wBACb,mCAAmC;wBACnC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;wBACrD,0EAA0E;wBAC1E,IAAI,GAAG,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;4BAC3B,QAAQ,CAAC,QAAQ,GAAG,KAAK,CAAA;wBAC3B,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACN,iBAAiB;wBACjB,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE;4BACvB,KAAK,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;4BACzB,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,IAAI;yBAC/B,CAAC,CAAA;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5E,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;QAC/B,IAAI;QACJ,QAAQ;KACT,CAAC,CAAC,CAAA;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,MAAsB;IAClD,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,qBAAqB;IACrB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjB,KAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAA;IAC5D,KAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAA;IACnE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAEd,wBAAwB;IACxB,8EAA8E;IAC9E,KAAK,CAAC,IAAI,CACR,4IAA4I,CAC7I,CAAA;IACD,KAAK,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAA;IAChF,KAAK,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAA;IAElE,6BAA6B;IAC7B,MAAM,YAAY,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAA;IAChD,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAA;QAC9C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAClC,KAAK,CAAC,IAAI,CAAC,UAAU,UAAU,KAAK,KAAK,YAAY,GAAG,CAAC,IAAI,GAAG,CAAC,CAAA;IACnE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAEd,+BAA+B;IAC/B,KAAK,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAClE,yEAAyE;QACzE,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;QAClE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACd,uDAAuD;QACvD,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;QACtE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACd,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;QAChE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACd,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC,CAAA;QAC5C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACd,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;QAChE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACd,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;QAChE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACd,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;QAC/D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACd,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAA;QACvC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAChB,CAAC;IAED,8BAA8B;IAC9B,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAA;IACxC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAEd,wBAAwB;IACxB,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAA;IAEvC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,MAAsB,EAAE,UAAkB;IACnE,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,CAAA;IAEnC,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,KAAK,EAAE,OAAO,CAAC,CAAA;AAC9C,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opensaas/stack-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "CLI tools for OpenSaas Stack",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -36,22 +36,22 @@
|
|
|
36
36
|
"url": "https://github.com/OpenSaasAU/stack/issues"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
39
|
+
"@modelcontextprotocol/sdk": "^1.24.3",
|
|
40
40
|
"chalk": "^5.6.2",
|
|
41
|
-
"chokidar": "^
|
|
42
|
-
"commander": "^14.0.
|
|
41
|
+
"chokidar": "^5.0.0",
|
|
42
|
+
"commander": "^14.0.2",
|
|
43
43
|
"jiti": "^2.6.1",
|
|
44
44
|
"ora": "^9.0.0",
|
|
45
45
|
"prompts": "^2.4.2",
|
|
46
|
-
"zod": "^4.1.
|
|
47
|
-
"@opensaas/stack-core": "0.
|
|
46
|
+
"zod": "^4.1.13",
|
|
47
|
+
"@opensaas/stack-core": "0.4.0"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
|
-
"@types/node": "^24.
|
|
50
|
+
"@types/node": "^24.10.1",
|
|
51
51
|
"@types/prompts": "^2.4.9",
|
|
52
|
-
"@vitest/coverage-v8": "^4.0.
|
|
52
|
+
"@vitest/coverage-v8": "^4.0.15",
|
|
53
53
|
"typescript": "^5.9.3",
|
|
54
|
-
"vitest": "^4.0.
|
|
54
|
+
"vitest": "^4.0.15"
|
|
55
55
|
},
|
|
56
56
|
"scripts": {
|
|
57
57
|
"build": "tsc",
|
|
@@ -14,6 +14,7 @@ import { getContext as getOpensaasContext } from '@opensaas/stack-core'
|
|
|
14
14
|
import type { Session as OpensaasSession, OpenSaasConfig } from '@opensaas/stack-core'
|
|
15
15
|
import { PrismaClient } from './prisma-client/client'
|
|
16
16
|
import type { Context } from './types'
|
|
17
|
+
import { prismaExtensions } from './prisma-extensions'
|
|
17
18
|
import configOrPromise from '../opensaas.config'
|
|
18
19
|
|
|
19
20
|
// Resolve config if it's a Promise (when plugins are present)
|
|
@@ -21,15 +22,29 @@ const configPromise = Promise.resolve(configOrPromise)
|
|
|
21
22
|
let resolvedConfig: OpenSaasConfig | null = null
|
|
22
23
|
|
|
23
24
|
// Internal Prisma singleton - managed automatically
|
|
24
|
-
const globalForPrisma = globalThis as unknown as { prisma:
|
|
25
|
-
let prisma:
|
|
25
|
+
const globalForPrisma = globalThis as unknown as { prisma: ReturnType<typeof createExtendedPrisma> | null }
|
|
26
|
+
let prisma: ReturnType<typeof createExtendedPrisma> | null = null
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Create Prisma client with result extensions
|
|
30
|
+
*/
|
|
31
|
+
function createExtendedPrisma(basePrisma: PrismaClient) {
|
|
32
|
+
// Check if there are any extensions to apply
|
|
33
|
+
if (Object.keys(prismaExtensions).length === 0) {
|
|
34
|
+
return basePrisma
|
|
35
|
+
}
|
|
36
|
+
// Apply result extensions
|
|
37
|
+
return basePrisma.$extends(prismaExtensions)
|
|
38
|
+
}
|
|
26
39
|
|
|
27
40
|
async function getPrisma() {
|
|
28
41
|
if (!prisma) {
|
|
29
42
|
if (!resolvedConfig) {
|
|
30
43
|
resolvedConfig = await configPromise
|
|
31
44
|
}
|
|
32
|
-
|
|
45
|
+
const basePrisma = resolvedConfig.db.prismaClientConstructor!(PrismaClient)
|
|
46
|
+
const extendedPrisma = createExtendedPrisma(basePrisma)
|
|
47
|
+
prisma = globalForPrisma.prisma ?? extendedPrisma
|
|
33
48
|
if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma
|
|
34
49
|
}
|
|
35
50
|
return prisma
|
|
@@ -84,7 +99,7 @@ const storage = {
|
|
|
84
99
|
export async function getContext<TSession extends OpensaasSession = OpensaasSession>(session?: TSession): Promise<Context<TSession>> {
|
|
85
100
|
const config = await getConfig()
|
|
86
101
|
const prismaClient = await getPrisma()
|
|
87
|
-
return getOpensaasContext(config, prismaClient, session ?? null, storage) as Context<TSession>
|
|
102
|
+
return getOpensaasContext(config, prismaClient, session ?? null, storage) as unknown as Context<TSession>
|
|
88
103
|
}
|
|
89
104
|
|
|
90
105
|
/**
|
|
@@ -94,7 +109,7 @@ export async function getContext<TSession extends OpensaasSession = OpensaasSess
|
|
|
94
109
|
export const rawOpensaasContext = (async () => {
|
|
95
110
|
const config = await getConfig()
|
|
96
111
|
const prismaClient = await getPrisma()
|
|
97
|
-
return getOpensaasContext(config, prismaClient, null, storage)
|
|
112
|
+
return getOpensaasContext(config, prismaClient, null, storage) as unknown as Context
|
|
98
113
|
})()
|
|
99
114
|
|
|
100
115
|
/**
|
|
@@ -131,17 +146,35 @@ exports[`Generate Command Integration > Generator Integration > should generate
|
|
|
131
146
|
* DO NOT EDIT - This file is automatically generated
|
|
132
147
|
*/
|
|
133
148
|
|
|
134
|
-
import type { Session as OpensaasSession, StorageUtils, ServerActionProps, AccessControlledDB } from '@opensaas/stack-core'
|
|
149
|
+
import type { Session as OpensaasSession, StorageUtils, ServerActionProps, AccessControlledDB, AccessContext } from '@opensaas/stack-core'
|
|
135
150
|
import type { PrismaClient, Prisma } from './prisma-client/client'
|
|
136
151
|
import type { PluginServices } from './plugin-types'
|
|
137
152
|
|
|
138
|
-
|
|
153
|
+
/**
|
|
154
|
+
* Virtual fields for User - computed fields not in database
|
|
155
|
+
* These are added to query results via resolveOutput hooks
|
|
156
|
+
*/
|
|
157
|
+
export type UserVirtualFields = {
|
|
158
|
+
// No virtual fields defined
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Transformed fields for User - fields with resultExtension transformations
|
|
163
|
+
* These override Prisma's base types with transformed types via result extensions
|
|
164
|
+
*/
|
|
165
|
+
export type UserTransformedFields = {
|
|
166
|
+
// No transformed fields defined
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
export type UserOutput = {
|
|
139
170
|
id: string
|
|
140
171
|
name: string
|
|
141
172
|
email: string
|
|
142
173
|
createdAt: Date
|
|
143
174
|
updatedAt: Date
|
|
144
|
-
}
|
|
175
|
+
} & UserVirtualFields
|
|
176
|
+
|
|
177
|
+
export type User = UserOutput
|
|
145
178
|
|
|
146
179
|
export type UserCreateInput = {
|
|
147
180
|
name: string
|
|
@@ -202,15 +235,43 @@ export type UserHooks = {
|
|
|
202
235
|
}) => Promise<void>
|
|
203
236
|
}
|
|
204
237
|
|
|
205
|
-
|
|
206
|
-
|
|
238
|
+
/**
|
|
239
|
+
* Custom DB type that uses Prisma's conditional types with virtual and transformed field support
|
|
240
|
+
* Types change based on select/include - relationships only present when explicitly included
|
|
241
|
+
* Virtual fields and transformed fields are added to the base model type
|
|
242
|
+
*/
|
|
243
|
+
export type CustomDB = Omit<AccessControlledDB<PrismaClient>,
|
|
244
|
+
'user'
|
|
245
|
+
> & {
|
|
246
|
+
user: {
|
|
247
|
+
findUnique: <T extends Prisma.UserFindUniqueArgs>(
|
|
248
|
+
args: Prisma.SelectSubset<T, Prisma.UserFindUniqueArgs>
|
|
249
|
+
) => Promise<(Omit<Prisma.UserGetPayload<T>, keyof UserTransformedFields> & UserTransformedFields & UserVirtualFields) | null>
|
|
250
|
+
findMany: <T extends Prisma.UserFindManyArgs>(
|
|
251
|
+
args?: Prisma.SelectSubset<T, Prisma.UserFindManyArgs>
|
|
252
|
+
) => Promise<Array<Omit<Prisma.UserGetPayload<T>, keyof UserTransformedFields> & UserTransformedFields & UserVirtualFields>>
|
|
253
|
+
create: <T extends Prisma.UserCreateArgs>(
|
|
254
|
+
args: Prisma.SelectSubset<T, Prisma.UserCreateArgs>
|
|
255
|
+
) => Promise<Omit<Prisma.UserGetPayload<T>, keyof UserTransformedFields> & UserTransformedFields & UserVirtualFields>
|
|
256
|
+
update: <T extends Prisma.UserUpdateArgs>(
|
|
257
|
+
args: Prisma.SelectSubset<T, Prisma.UserUpdateArgs>
|
|
258
|
+
) => Promise<(Omit<Prisma.UserGetPayload<T>, keyof UserTransformedFields> & UserTransformedFields & UserVirtualFields) | null>
|
|
259
|
+
delete: <T extends Prisma.UserDeleteArgs>(
|
|
260
|
+
args: Prisma.SelectSubset<T, Prisma.UserDeleteArgs>
|
|
261
|
+
) => Promise<(Omit<Prisma.UserGetPayload<T>, keyof UserTransformedFields> & UserTransformedFields & UserVirtualFields) | null>
|
|
262
|
+
count: (args?: Prisma.UserCountArgs) => Promise<number>
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* Context type compatible with AccessContext but with CustomDB for virtual field typing
|
|
268
|
+
* Extends AccessContext and overrides db property to include virtual fields in output types
|
|
269
|
+
*/
|
|
270
|
+
export type Context<TSession extends OpensaasSession = OpensaasSession> = Omit<AccessContext<PrismaClient>, 'db' | 'session'> & {
|
|
271
|
+
db: CustomDB
|
|
207
272
|
session: TSession
|
|
208
|
-
prisma: PrismaClient
|
|
209
|
-
storage: StorageUtils
|
|
210
|
-
plugins: PluginServices
|
|
211
273
|
serverAction: (props: ServerActionProps) => Promise<unknown>
|
|
212
274
|
sudo: () => Context<TSession>
|
|
213
|
-
_isSudo: boolean
|
|
214
275
|
}"
|
|
215
276
|
`;
|
|
216
277
|
|
|
@@ -287,19 +348,29 @@ exports[`Generate Command Integration > Generator Integration > should handle em
|
|
|
287
348
|
* DO NOT EDIT - This file is automatically generated
|
|
288
349
|
*/
|
|
289
350
|
|
|
290
|
-
import type { Session as OpensaasSession, StorageUtils, ServerActionProps, AccessControlledDB } from '@opensaas/stack-core'
|
|
351
|
+
import type { Session as OpensaasSession, StorageUtils, ServerActionProps, AccessControlledDB, AccessContext } from '@opensaas/stack-core'
|
|
291
352
|
import type { PrismaClient, Prisma } from './prisma-client/client'
|
|
292
353
|
import type { PluginServices } from './plugin-types'
|
|
293
354
|
|
|
294
|
-
|
|
295
|
-
|
|
355
|
+
/**
|
|
356
|
+
* Custom DB type that uses Prisma's conditional types with virtual and transformed field support
|
|
357
|
+
* Types change based on select/include - relationships only present when explicitly included
|
|
358
|
+
* Virtual fields and transformed fields are added to the base model type
|
|
359
|
+
*/
|
|
360
|
+
export type CustomDB = Omit<AccessControlledDB<PrismaClient>,
|
|
361
|
+
|
|
362
|
+
> & {
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
/**
|
|
366
|
+
* Context type compatible with AccessContext but with CustomDB for virtual field typing
|
|
367
|
+
* Extends AccessContext and overrides db property to include virtual fields in output types
|
|
368
|
+
*/
|
|
369
|
+
export type Context<TSession extends OpensaasSession = OpensaasSession> = Omit<AccessContext<PrismaClient>, 'db' | 'session'> & {
|
|
370
|
+
db: CustomDB
|
|
296
371
|
session: TSession
|
|
297
|
-
prisma: PrismaClient
|
|
298
|
-
storage: StorageUtils
|
|
299
|
-
plugins: PluginServices
|
|
300
372
|
serverAction: (props: ServerActionProps) => Promise<unknown>
|
|
301
373
|
sudo: () => Context<TSession>
|
|
302
|
-
_isSudo: boolean
|
|
303
374
|
}"
|
|
304
375
|
`;
|
|
305
376
|
|
package/src/commands/generate.ts
CHANGED
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
writeLists,
|
|
12
12
|
writeContext,
|
|
13
13
|
writePluginTypes,
|
|
14
|
-
|
|
14
|
+
writePrismaExtensions,
|
|
15
15
|
} from '../generator/index.js'
|
|
16
16
|
import { OpenSaasConfig } from '@opensaas/stack-core'
|
|
17
17
|
|
|
@@ -58,9 +58,8 @@ export async function generateCommand() {
|
|
|
58
58
|
|
|
59
59
|
try {
|
|
60
60
|
// Import plugin engine (avoid circular dependency)
|
|
61
|
-
const { executeBeforeGenerateHooks } =
|
|
62
|
-
'@opensaas/stack-core/config/plugin-engine'
|
|
63
|
-
)
|
|
61
|
+
const { executeBeforeGenerateHooks } =
|
|
62
|
+
await import('@opensaas/stack-core/config/plugin-engine')
|
|
64
63
|
config = await executeBeforeGenerateHooks(config)
|
|
65
64
|
pluginSpinner.succeed(chalk.green('Plugin beforeGenerate hooks complete'))
|
|
66
65
|
} catch (err) {
|
|
@@ -78,6 +77,7 @@ export async function generateCommand() {
|
|
|
78
77
|
const listsPath = path.join(cwd, '.opensaas', 'lists.ts')
|
|
79
78
|
const contextPath = path.join(cwd, '.opensaas', 'context.ts')
|
|
80
79
|
const pluginTypesPath = path.join(cwd, '.opensaas', 'plugin-types.ts')
|
|
80
|
+
const prismaExtensionsPath = path.join(cwd, '.opensaas', 'prisma-extensions.ts')
|
|
81
81
|
|
|
82
82
|
writePrismaSchema(config, prismaSchemaPath)
|
|
83
83
|
writePrismaConfig(config, prismaConfigPath)
|
|
@@ -85,6 +85,7 @@ export async function generateCommand() {
|
|
|
85
85
|
writeLists(config, listsPath)
|
|
86
86
|
writeContext(config, contextPath)
|
|
87
87
|
writePluginTypes(config, pluginTypesPath)
|
|
88
|
+
writePrismaExtensions(config, prismaExtensionsPath)
|
|
88
89
|
|
|
89
90
|
generatorSpinner.succeed(chalk.green('Schema generation complete'))
|
|
90
91
|
console.log(chalk.green('✅ Prisma schema generated'))
|
|
@@ -93,6 +94,7 @@ export async function generateCommand() {
|
|
|
93
94
|
console.log(chalk.green('✅ Lists namespace generated'))
|
|
94
95
|
console.log(chalk.green('✅ Context factory generated'))
|
|
95
96
|
console.log(chalk.green('✅ Plugin types generated'))
|
|
97
|
+
console.log(chalk.green('✅ Prisma extensions generated'))
|
|
96
98
|
|
|
97
99
|
// Execute afterGenerate hooks if plugins are present
|
|
98
100
|
if (config.plugins && config.plugins.length > 0) {
|
|
@@ -107,9 +109,8 @@ export async function generateCommand() {
|
|
|
107
109
|
}
|
|
108
110
|
|
|
109
111
|
// Execute afterGenerate hooks
|
|
110
|
-
const { executeAfterGenerateHooks } =
|
|
111
|
-
'@opensaas/stack-core/config/plugin-engine'
|
|
112
|
-
)
|
|
112
|
+
const { executeAfterGenerateHooks } =
|
|
113
|
+
await import('@opensaas/stack-core/config/plugin-engine')
|
|
113
114
|
const modifiedFiles = await executeAfterGenerateHooks(config, generatedFiles)
|
|
114
115
|
|
|
115
116
|
// Write back modified files
|
|
@@ -165,18 +166,6 @@ export async function generateCommand() {
|
|
|
165
166
|
process.exit(1)
|
|
166
167
|
}
|
|
167
168
|
|
|
168
|
-
// Patch Prisma types with field transformations
|
|
169
|
-
const patchSpinner = ora('Patching Prisma types...').start()
|
|
170
|
-
try {
|
|
171
|
-
patchPrismaTypes(config, cwd)
|
|
172
|
-
patchSpinner.succeed(chalk.green('Type patching complete'))
|
|
173
|
-
} catch (err) {
|
|
174
|
-
patchSpinner.fail(chalk.red('Failed to patch types'))
|
|
175
|
-
const message = err instanceof Error ? err.message : String(err)
|
|
176
|
-
console.error(chalk.red('\n❌ Error:'), message)
|
|
177
|
-
process.exit(1)
|
|
178
|
-
}
|
|
179
|
-
|
|
180
169
|
console.log(chalk.bold('\n✨ Generation complete!\n'))
|
|
181
170
|
console.log(chalk.gray('Next steps:'))
|
|
182
171
|
console.log(chalk.gray(' 1. Run: npx prisma db push'))
|