Skip to content

Commit 76bfb7a

Browse files
authored
feat(config): added better config options for output (#10)
* feat(config): added better config options for output * chore: test prisma config
1 parent ead8334 commit 76bfb7a

8 files changed

Lines changed: 263 additions & 39 deletions

File tree

‎README.md‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,14 @@ generator zero {
9393
// Optional list of Prisma Model names you want to exclude from the generated schema
9494
// This does *not* change tables that replicate to zero-cache - only the types on the client
9595
excludeTables = ["Posts", "Comments", ...]
96+
// When true, skip generating the query builder (`zql` and `builder` exports)
97+
skipBuilder = true
98+
// When true, skip generating the module augmentation for default types in Zero
99+
skipDeclare = true
100+
// When true, enable legacy CRUD mutators (sets `enableLegacyMutators` to `true` in the generated schema)
101+
enableLegacyMutators = true
102+
// When true, enable legacy CRUD queries (sets `enableLegacyQueries` to `true` in the generated schema)
103+
enableLegacyQueries = true
96104
}
97105
```
98106

‎integration/generated/zero/schema.ts‎

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -555,9 +555,3 @@ export const zql = createBuilder(schema);
555555
* @deprecated Use `zql` instead.
556556
*/
557557
export const builder = zql;
558-
/** Defines the default types for Zero */
559-
declare module '@rocicorp/zero' {
560-
interface DefaultTypes {
561-
schema: Schema;
562-
}
563-
}

‎integration/schema.prisma‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ generator zero {
88
prettier = true
99
// camelCase = true
1010
excludeTables = ["ExcludedModel"]
11+
// skipBuilder = true
12+
skipDeclare = true
13+
// enableLegacyMutators = true
14+
// enableLegacyQueries = true
1115
}
1216

1317
// ============================================================================

‎package.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "prisma-zero",
3-
"version": "0.1.0",
3+
"version": "0.1.1",
44
"description": "Generate Zero schemas from Prisma ORM schemas",
55
"type": "module",
66
"scripts": {

‎src/generator.ts‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,17 @@ export async function onGenerate(options: GeneratorOptions) {
2424
resolvePrettierConfig: generator.config.resolvePrettierConfig !== 'false', // Default true
2525
camelCase: generator.config.camelCase === 'true', // Default false
2626
excludeTables: loadExcludeTables(generator),
27+
skipBuilder: generator.config.skipBuilder === 'true', // Default false
28+
skipDeclare: generator.config.skipDeclare === 'true', // Default false
29+
enableLegacyMutators: generator.config.enableLegacyMutators === 'true', // Default false
30+
enableLegacyQueries: generator.config.enableLegacyQueries === 'true', // Default false
2731
} satisfies Config;
2832

2933
// Transform the schema
3034
const transformedSchema = transformSchema(dmmf, config);
3135

3236
// Generate code
33-
let output = generateCode(transformedSchema);
37+
let output = generateCode(transformedSchema, config);
3438

3539
// Apply prettier if configured
3640
if (config.prettier) {

‎src/generators/code-generator.ts‎

Lines changed: 50 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,23 @@
11
import type {
2+
Config,
23
TransformedSchema,
34
ZeroModel,
45
ZeroRelationship,
56
ZeroRelationshipLink,
67
ZeroTypeMapping,
78
} from '../types';
89

9-
function generateImports(schema: TransformedSchema): string {
10+
function generateImports(schema: TransformedSchema, config: Config): string {
1011
const usedImports = new Set<string>();
1112

1213
// These are always used
1314
usedImports.add('table');
1415
usedImports.add('createSchema');
15-
usedImports.add('createBuilder');
16+
17+
// Only add createBuilder if not skipped
18+
if (!config.skipBuilder) {
19+
usedImports.add('createBuilder');
20+
}
1621

1722
// Check which type functions are used in the schema
1823
schema.models.forEach(model => {
@@ -150,7 +155,7 @@ ${relationshipsStr}
150155
return filteredRelationships.length > 0 ? filteredRelationships.join('') : '';
151156
}
152157

153-
function generateSchema(schema: TransformedSchema): string {
158+
function generateSchema(schema: TransformedSchema, config: Config): string {
154159
let output = '/**\n';
155160
output += ' * The Zero schema object.\n';
156161
output +=
@@ -178,6 +183,15 @@ function generateSchema(schema: TransformedSchema): string {
178183
output += ' ],\n';
179184
}
180185

186+
// Add legacy options if enabled
187+
if (config.enableLegacyMutators) {
188+
output += ' enableLegacyMutators: true,\n';
189+
}
190+
191+
if (config.enableLegacyQueries) {
192+
output += ' enableLegacyQueries: true,\n';
193+
}
194+
181195
output += '});\n\n';
182196

183197
// Add types
@@ -188,36 +202,45 @@ function generateSchema(schema: TransformedSchema): string {
188202
output += ' */\n';
189203
output += 'export type Schema = typeof schema;\n';
190204

191-
output += '/**\n';
192-
output += ' * Represents the ZQL query builder.\n';
193-
output +=
194-
' * This type is auto-generated from your Prisma schema definition.\n';
195-
output += ' */\n';
196-
output += 'export const zql = createBuilder(schema);\n';
197-
198-
output += '/**\n';
199-
output += ' * Represents the Zero schema query builder.\n';
200-
output +=
201-
' * This type is auto-generated from your Prisma schema definition.\n';
202-
output += ' *\n';
203-
output += ' * @deprecated Use `zql` instead.\n';
204-
output += ' */\n';
205-
output += 'export const builder = zql;\n';
205+
// Only generate builder if not skipped
206+
if (!config.skipBuilder) {
207+
output += '/**\n';
208+
output += ' * Represents the ZQL query builder.\n';
209+
output +=
210+
' * This type is auto-generated from your Prisma schema definition.\n';
211+
output += ' */\n';
212+
output += 'export const zql = createBuilder(schema);\n';
213+
214+
output += '/**\n';
215+
output += ' * Represents the Zero schema query builder.\n';
216+
output +=
217+
' * This type is auto-generated from your Prisma schema definition.\n';
218+
output += ' *\n';
219+
output += ' * @deprecated Use `zql` instead.\n';
220+
output += ' */\n';
221+
output += 'export const builder = zql;\n';
222+
}
206223

207-
output += '/** Defines the default types for Zero */\n';
208-
output += 'declare module "@rocicorp/zero" {\n';
209-
output += ' interface DefaultTypes {\n';
210-
output += ' schema: Schema;\n';
211-
output += ' }\n';
212-
output += '}\n';
224+
// Only generate declare module if not skipped
225+
if (!config.skipDeclare) {
226+
output += '/** Defines the default types for Zero */\n';
227+
output += 'declare module "@rocicorp/zero" {\n';
228+
output += ' interface DefaultTypes {\n';
229+
output += ' schema: Schema;\n';
230+
output += ' }\n';
231+
output += '}\n';
232+
}
213233

214234
return output;
215235
}
216236

217-
export function generateCode(schema: TransformedSchema): string {
237+
export function generateCode(
238+
schema: TransformedSchema,
239+
config: Config,
240+
): string {
218241
let output = `${HEADER_PREFIX}\n\n`;
219242

220-
output += generateImports(schema);
243+
output += generateImports(schema, config);
221244

222245
output += generateUnionTypes(schema);
223246

@@ -227,7 +250,7 @@ export function generateCode(schema: TransformedSchema): string {
227250

228251
output += generateRelationships(schema.models);
229252

230-
output += generateSchema(schema);
253+
output += generateSchema(schema, config);
231254

232255
return output;
233256
}

‎src/types.ts‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ export type Config = {
66
resolvePrettierConfig: boolean;
77
camelCase: boolean;
88
excludeTables?: string[];
9+
skipBuilder?: boolean;
10+
skipDeclare?: boolean;
11+
enableLegacyMutators?: boolean;
12+
enableLegacyQueries?: boolean;
913
};
1014

1115
export type ZeroTypeMapping = {

0 commit comments

Comments
 (0)