ormbridge 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/README.md +239 -37
  2. package/dist/cliRunner.js +14 -1
  3. package/dist/cliRunner.js.map +1 -1
  4. package/dist/config.d.ts +3 -0
  5. package/dist/config.js +9 -0
  6. package/dist/config.js.map +1 -1
  7. package/dist/emitters/drizzle.d.ts +19 -0
  8. package/dist/emitters/drizzle.js +1337 -0
  9. package/dist/emitters/drizzle.js.map +1 -0
  10. package/dist/emitters/jsonSchema.d.ts +20 -0
  11. package/dist/emitters/jsonSchema.js +503 -0
  12. package/dist/emitters/jsonSchema.js.map +1 -0
  13. package/dist/emitters/sqlDdl.d.ts +29 -0
  14. package/dist/emitters/sqlDdl.js +1741 -0
  15. package/dist/emitters/sqlDdl.js.map +1 -0
  16. package/dist/emitters/sqlalchemy.d.ts +30 -0
  17. package/dist/emitters/sqlalchemy.js +1725 -0
  18. package/dist/emitters/sqlalchemy.js.map +1 -0
  19. package/dist/emitters/typeorm.js +53 -1
  20. package/dist/emitters/typeorm.js.map +1 -1
  21. package/dist/emitters/zod.d.ts +40 -0
  22. package/dist/emitters/zod.js +498 -0
  23. package/dist/emitters/zod.js.map +1 -0
  24. package/dist/formats.d.ts +11 -1
  25. package/dist/formats.js +84 -0
  26. package/dist/formats.js.map +1 -1
  27. package/dist/index.d.ts +18 -0
  28. package/dist/index.js +9 -0
  29. package/dist/index.js.map +1 -1
  30. package/dist/io.js +82 -8
  31. package/dist/io.js.map +1 -1
  32. package/dist/parsers/drizzle.d.ts +12 -0
  33. package/dist/parsers/drizzle.js +2040 -0
  34. package/dist/parsers/drizzle.js.map +1 -0
  35. package/dist/parsers/jsonSchema.d.ts +21 -0
  36. package/dist/parsers/jsonSchema.js +1432 -0
  37. package/dist/parsers/jsonSchema.js.map +1 -0
  38. package/dist/parsers/pythonSyntax.d.ts +7 -1
  39. package/dist/parsers/pythonSyntax.js +47 -8
  40. package/dist/parsers/pythonSyntax.js.map +1 -1
  41. package/dist/parsers/sqlDdl.d.ts +18 -0
  42. package/dist/parsers/sqlDdl.js +2302 -0
  43. package/dist/parsers/sqlDdl.js.map +1 -0
  44. package/dist/parsers/sqlSyntax.d.ts +79 -0
  45. package/dist/parsers/sqlSyntax.js +698 -0
  46. package/dist/parsers/sqlSyntax.js.map +1 -0
  47. package/dist/parsers/sqlTypes.d.ts +53 -0
  48. package/dist/parsers/sqlTypes.js +742 -0
  49. package/dist/parsers/sqlTypes.js.map +1 -0
  50. package/dist/parsers/sqlalchemy.d.ts +12 -0
  51. package/dist/parsers/sqlalchemy.js +3191 -0
  52. package/dist/parsers/sqlalchemy.js.map +1 -0
  53. package/dist/parsers/typeorm.js +22 -7
  54. package/dist/parsers/typeorm.js.map +1 -1
  55. package/dist/prismaOnlyConstructs.d.ts +2 -2
  56. package/dist/prismaOnlyConstructs.js +5 -5
  57. package/dist/prismaOnlyConstructs.js.map +1 -1
  58. package/package.json +2 -1
@@ -0,0 +1,498 @@
1
+ import { prismaOnlyWarnings } from '../prismaOnlyConstructs.js';
2
+ import { findModel } from '../ir.js';
3
+ import { toCamelCase, toSnakeCase } from '../naming.js';
4
+ const IDENTIFIER_PATTERN = /^[A-Za-z_$][A-Za-z0-9_$]*$/;
5
+ const MAX_KEY_DEPTH = 5;
6
+ /** Prisma default functions that the database fills in from a counter. */
7
+ const COUNTER_FUNCTIONS = new Set([
8
+ 'auto()',
9
+ 'sequence()',
10
+ ]);
11
+ /** Suffixes of the names written for a model, besides the model's own type name. */
12
+ const MODEL_SUFFIXES = [
13
+ 'Schema',
14
+ 'Create',
15
+ 'CreateSchema',
16
+ 'Update',
17
+ 'UpdateSchema',
18
+ 'WithRelations',
19
+ 'WithRelationsSchema',
20
+ ];
21
+ export function emitZod(schema, options) {
22
+ const context = {
23
+ schema,
24
+ options,
25
+ dates: options.dates ?? 'coerce',
26
+ bigints: options.bigints ?? 'string',
27
+ warnings: prismaOnlyWarnings(schema, true),
28
+ names: new Map(),
29
+ inverseNames: new Map(),
30
+ typeNames: new Map(),
31
+ };
32
+ allocateTypeNames(context);
33
+ allocateMemberNames(context);
34
+ const reverseMembers = new Map();
35
+ const forward = new Map();
36
+ for (const model of schema.models) {
37
+ forward.set(model.name, buildForwardMembers(context, model, reverseMembers));
38
+ }
39
+ const blocks = [];
40
+ for (const enumDefinition of schema.enums) {
41
+ blocks.push(emitEnum(context, enumDefinition));
42
+ }
43
+ for (const model of schema.models) {
44
+ const members = forward.get(model.name) ?? { scalars: [], relations: [] };
45
+ blocks.push(emitModel(context, model, members.scalars, [
46
+ ...members.relations,
47
+ ...(reverseMembers.get(model.name) ?? []),
48
+ ]));
49
+ }
50
+ if (blocks.length === 0) {
51
+ return { text: '', warnings: context.warnings };
52
+ }
53
+ return {
54
+ text: `import { z } from 'zod';\n\n${blocks.join('\n\n')}\n`,
55
+ warnings: context.warnings,
56
+ };
57
+ }
58
+ // ---------------------------------------------------------------------------
59
+ // Names
60
+ // ---------------------------------------------------------------------------
61
+ function quote(value) {
62
+ const escaped = value.replace(/\\/g, '\\\\').replace(/\n/g, '\\n');
63
+ return `'${escaped.replace(/'/g, "\\'")}'`;
64
+ }
65
+ /** Writes a property or enum member name, quoting it when it is not a valid identifier. */
66
+ function memberKey(name) {
67
+ return IDENTIFIER_PATTERN.test(name) ? name : quote(name);
68
+ }
69
+ function typeIdentifier(context, description, raw) {
70
+ if (IDENTIFIER_PATTERN.test(raw)) {
71
+ return raw;
72
+ }
73
+ const replaced = raw.replace(/[^A-Za-z0-9_$]/g, '_');
74
+ const safe = /^[0-9]/.test(replaced) ? `_${replaced}` : replaced;
75
+ const result = safe === '' ? '_' : safe;
76
+ context.warnings.push(`${description}: "${raw}" is not a valid TypeScript identifier; it was written as "${result}".`);
77
+ return result;
78
+ }
79
+ function uniqueName(baseName, used) {
80
+ let candidate = baseName;
81
+ let suffix = 2;
82
+ while (used.has(candidate)) {
83
+ candidate = `${baseName}${suffix}`;
84
+ suffix += 1;
85
+ }
86
+ used.add(candidate);
87
+ return candidate;
88
+ }
89
+ function propertyName(context, rawName) {
90
+ return context.options.camelFields ? toCamelCase(rawName) : rawName;
91
+ }
92
+ /**
93
+ * Picks the base name of a type so that none of the names derived from it (`<Base>Schema`, ...)
94
+ * is taken. The derived names are reserved together with the base.
95
+ */
96
+ function reserveBase(base, suffixes, used) {
97
+ let candidate = base;
98
+ let counter = 2;
99
+ const clashes = (name) => used.has(name) ||
100
+ suffixes.some((suffix) => used.has(name + suffix));
101
+ while (clashes(candidate)) {
102
+ candidate = `${base}${counter}`;
103
+ counter += 1;
104
+ }
105
+ used.add(candidate);
106
+ for (const suffix of suffixes) {
107
+ used.add(candidate + suffix);
108
+ }
109
+ return candidate;
110
+ }
111
+ function allocateTypeNames(context) {
112
+ // "z" is the imported namespace.
113
+ const used = new Set(['z']);
114
+ for (const enumDefinition of context.schema.enums) {
115
+ const safe = typeIdentifier(context, `enum ${enumDefinition.name}`, enumDefinition.name);
116
+ const unique = reserveBase(safe, ['Schema'], used);
117
+ if (unique !== safe) {
118
+ context.warnings.push(`enum ${enumDefinition.name}: the name is already used by another type; it was written as "${unique}".`);
119
+ }
120
+ context.typeNames.set(`enum:${enumDefinition.name}`, unique);
121
+ }
122
+ for (const model of context.schema.models) {
123
+ const safe = typeIdentifier(context, model.name, model.name);
124
+ const unique = reserveBase(safe, MODEL_SUFFIXES, used);
125
+ if (unique !== safe) {
126
+ context.warnings.push(`${model.name}: the name is already used by an enum, another model or a name derived from one; the schema was written as "${unique}Schema".`);
127
+ }
128
+ context.typeNames.set(`model:${model.name}`, unique);
129
+ }
130
+ }
131
+ function modelTypeName(context, model) {
132
+ return context.typeNames.get(`model:${model.name}`) ?? model.name;
133
+ }
134
+ function enumTypeName(context, enumDefinition) {
135
+ return (context.typeNames.get(`enum:${enumDefinition.name}`) ?? enumDefinition.name);
136
+ }
137
+ function namesOf(context, model) {
138
+ return (context.names.get(model.name) ?? {
139
+ fields: new Map(),
140
+ relations: new Map(),
141
+ scalars: new Map(),
142
+ used: new Set(),
143
+ });
144
+ }
145
+ function allocateMemberNames(context) {
146
+ for (const model of context.schema.models) {
147
+ const names = {
148
+ fields: new Map(),
149
+ relations: new Map(),
150
+ scalars: new Map(),
151
+ used: new Set(),
152
+ };
153
+ for (const field of model.fields) {
154
+ names.fields.set(field.name, uniqueName(propertyName(context, field.name), names.used));
155
+ }
156
+ for (const relation of model.relations) {
157
+ if (relation.kind !== 'manyToMany') {
158
+ // The foreign-key scalar is written first; skip it when a field already provides it.
159
+ const scalarName = propertyName(context, relation.columnName);
160
+ if (!names.used.has(scalarName)) {
161
+ names.used.add(scalarName);
162
+ names.scalars.set(relation.name, scalarName);
163
+ }
164
+ }
165
+ names.relations.set(relation.name, uniqueName(propertyName(context, relation.name), names.used));
166
+ }
167
+ context.names.set(model.name, names);
168
+ }
169
+ for (const model of context.schema.models) {
170
+ for (const relation of model.relations) {
171
+ const targetNames = context.names.get(relation.targetModel);
172
+ if (targetNames === undefined) {
173
+ continue;
174
+ }
175
+ const defaultName = relation.kind === 'oneToOne'
176
+ ? toSnakeCase(model.name)
177
+ : `${toSnakeCase(model.name)}_set`;
178
+ context.inverseNames.set(`${model.name}.${relation.name}`, uniqueName(propertyName(context, relation.relatedName ?? defaultName), targetNames.used));
179
+ }
180
+ }
181
+ }
182
+ // ---------------------------------------------------------------------------
183
+ // Enums
184
+ // ---------------------------------------------------------------------------
185
+ /**
186
+ * Writes the enum as a const object (so `Role.ADMIN` works like the member of the interface
187
+ * emitter's `enum Role`), the `z.enum` schema built from it and the union type.
188
+ */
189
+ function emitEnum(context, enumDefinition) {
190
+ const name = enumTypeName(context, enumDefinition);
191
+ const lines = [`export const ${name} = {`];
192
+ const usedMembers = new Set();
193
+ for (const value of enumDefinition.values) {
194
+ const memberName = enumMemberName(context, enumDefinition, value, usedMembers);
195
+ if (value.label !== undefined && value.label !== '') {
196
+ lines.push(` /** ${escapeComment(value.label)} */`);
197
+ }
198
+ lines.push(` ${memberKey(memberName)}: ${quote(value.dbValue)},`);
199
+ }
200
+ lines.push('} as const;');
201
+ lines.push(`export const ${name}Schema = z.enum(${name});`);
202
+ lines.push(`export type ${name} = z.infer<typeof ${name}Schema>;`);
203
+ return lines.join('\n');
204
+ }
205
+ function enumMemberName(context, enumDefinition, value, used) {
206
+ const unique = uniqueName(value.name, used);
207
+ if (unique !== value.name) {
208
+ context.warnings.push(`enum ${enumDefinition.name}: the member "${value.name}" is declared more than once; the repeat was written as "${unique}".`);
209
+ }
210
+ return unique;
211
+ }
212
+ function escapeComment(text) {
213
+ return text.replace(/\*\//g, '*\\/').replace(/\s*\n\s*/g, ' ');
214
+ }
215
+ // ---------------------------------------------------------------------------
216
+ // Types
217
+ // ---------------------------------------------------------------------------
218
+ function dateSchema(context, type) {
219
+ if (context.dates === 'coerce') {
220
+ return 'z.coerce.date()';
221
+ }
222
+ return type === 'date' ? 'z.iso.date()' : 'z.iso.datetime({ offset: true })';
223
+ }
224
+ function bigIntSchema(context) {
225
+ return context.bigints === 'bigint'
226
+ ? 'z.coerce.bigint()'
227
+ : 'z.string().regex(/^-?\\d+$/)';
228
+ }
229
+ /** A string of digits that fits `DECIMAL(maxDigits, decimalPlaces)`; any decimal number when unsized. */
230
+ function decimalSchema(field) {
231
+ const digits = field?.maxDigits;
232
+ if (digits === undefined) {
233
+ return 'z.string().regex(/^-?\\d+(\\.\\d+)?$/)';
234
+ }
235
+ const places = field?.decimalPlaces ?? 0;
236
+ const integerDigits = Math.max(digits - places, 1);
237
+ const fraction = places > 0 ? `(\\.\\d{1,${places}})?` : '';
238
+ return `z.string().regex(/^-?\\d{1,${integerDigits}}${fraction}$/)`;
239
+ }
240
+ function rangeBoundSchema(context, field) {
241
+ switch (field.rangeOf) {
242
+ case 'int':
243
+ return 'z.number().int()';
244
+ case 'bigInt':
245
+ return bigIntSchema(context);
246
+ case 'decimal':
247
+ return decimalSchema(undefined);
248
+ case 'dateTime':
249
+ return dateSchema(context, 'dateTime');
250
+ case 'date':
251
+ return dateSchema(context, 'date');
252
+ default:
253
+ return 'z.string()';
254
+ }
255
+ }
256
+ /**
257
+ * Returns the Zod expression of a scalar field, without `.nullable()`. Problems are only
258
+ * reported when `report` is true, so a type that is looked up twice produces one warning.
259
+ */
260
+ function fieldSchema(context, label, field, report) {
261
+ const element = elementSchema(context, label, field, report);
262
+ let result = element;
263
+ for (let level = 0; level < (field.arrayDepth ?? 0); level += 1) {
264
+ result = `z.array(${result})`;
265
+ }
266
+ return result;
267
+ }
268
+ function elementSchema(context, label, field, report) {
269
+ if (field.enumName !== undefined) {
270
+ const enumDefinition = context.schema.enums.find((candidate) => candidate.name === field.enumName);
271
+ if (enumDefinition !== undefined) {
272
+ return `${enumTypeName(context, enumDefinition)}Schema`;
273
+ }
274
+ if (report) {
275
+ context.warnings.push(`${label}: enum "${field.enumName}" does not exist in the schema; the property is validated as a string.`);
276
+ }
277
+ return 'z.string()';
278
+ }
279
+ switch (field.type) {
280
+ case 'string':
281
+ case 'text':
282
+ return field.maxLength === undefined
283
+ ? 'z.string()'
284
+ : `z.string().max(${field.maxLength})`;
285
+ case 'uuid':
286
+ return 'z.uuid()';
287
+ case 'time':
288
+ case 'duration':
289
+ return 'z.string()';
290
+ case 'bytes':
291
+ // Binary data travels as base64 text.
292
+ return 'z.base64()';
293
+ case 'bigInt':
294
+ return bigIntSchema(context);
295
+ case 'decimal':
296
+ return decimalSchema(field);
297
+ case 'int':
298
+ return 'z.number().int()';
299
+ case 'float':
300
+ return 'z.number()';
301
+ case 'boolean':
302
+ return 'z.boolean()';
303
+ case 'dateTime':
304
+ return dateSchema(context, 'dateTime');
305
+ case 'date':
306
+ return dateSchema(context, 'date');
307
+ case 'json':
308
+ return 'z.unknown()';
309
+ case 'ipAddress':
310
+ return 'z.union([z.ipv4(), z.ipv6()])';
311
+ case 'hstore':
312
+ return 'z.record(z.string(), z.string().nullable())';
313
+ case 'range': {
314
+ const bound = rangeBoundSchema(context, field);
315
+ return `z.object({ lower: ${bound}.nullable(), upper: ${bound}.nullable(), bounds: z.string().optional() })`;
316
+ }
317
+ default:
318
+ if (report) {
319
+ context.warnings.push(`${label}: unknown field type "${String(field.type)}"; the property is validated as unknown.`);
320
+ }
321
+ return 'z.unknown()';
322
+ }
323
+ }
324
+ /** Resolves the schema of the column a relation points at (an explicit to_field, else the primary key). */
325
+ function referencedSchema(context, target, toField, depth = 0) {
326
+ if (depth > MAX_KEY_DEPTH) {
327
+ return undefined;
328
+ }
329
+ const explicit = toField === undefined
330
+ ? undefined
331
+ : target.fields.find((field) => field.name === toField);
332
+ const column = explicit ?? target.fields.find((field) => field.isPrimaryKey);
333
+ if (column !== undefined) {
334
+ return fieldSchema(context, `${target.name}.${column.name}`, column, false);
335
+ }
336
+ const primaryRelation = target.relations.find((relation) => relation.isPrimaryKey === true);
337
+ if (primaryRelation === undefined) {
338
+ return undefined;
339
+ }
340
+ const chained = findModel(context.schema, primaryRelation.targetModel);
341
+ return chained === undefined
342
+ ? undefined
343
+ : referencedSchema(context, chained, primaryRelation.toField, depth + 1);
344
+ }
345
+ // ---------------------------------------------------------------------------
346
+ // Members
347
+ // ---------------------------------------------------------------------------
348
+ /** True when the database fills the column in itself, so a create payload must not carry it. */
349
+ function isGeneratedByDatabase(field) {
350
+ if (field.generated !== undefined || field.isAutoUpdated) {
351
+ return true;
352
+ }
353
+ const fallback = field.default;
354
+ if (fallback === undefined) {
355
+ return false;
356
+ }
357
+ return (fallback.kind === 'autoIncrement' ||
358
+ (fallback.kind === 'dbExpression' &&
359
+ fallback.isFunction === true &&
360
+ COUNTER_FUNCTIONS.has(fallback.expression)));
361
+ }
362
+ function buildForwardMembers(context, model, reverseMembers) {
363
+ const scalars = [];
364
+ const relations = [];
365
+ const names = namesOf(context, model);
366
+ for (const field of model.fields) {
367
+ const label = `${model.name}.${field.name}`;
368
+ const omitOnCreate = isGeneratedByDatabase(field);
369
+ scalars.push({
370
+ name: names.fields.get(field.name) ?? field.name,
371
+ schema: fieldSchema(context, label, field, true),
372
+ nullable: field.isNullable,
373
+ omitOnCreate,
374
+ optionalOnCreate: !omitOnCreate &&
375
+ (field.isNullable ||
376
+ field.default !== undefined ||
377
+ field.isDbDefault === true),
378
+ });
379
+ }
380
+ for (const relation of model.relations) {
381
+ const label = `${model.name}.${relation.name}`;
382
+ const target = findModel(context.schema, relation.targetModel);
383
+ if (target === undefined) {
384
+ context.warnings.push(`${label}: target model "${relation.targetModel}" does not exist in the schema; the relation was skipped.`);
385
+ continue;
386
+ }
387
+ const targetName = modelTypeName(context, target);
388
+ const relationProp = names.relations.get(relation.name) ?? relation.name;
389
+ const inverseProp = context.inverseNames.get(label) ?? toSnakeCase(model.name);
390
+ if (relation.kind === 'manyToMany') {
391
+ relations.push({
392
+ name: relationProp,
393
+ target: targetName,
394
+ list: true,
395
+ nullable: false,
396
+ });
397
+ addReverse(reverseMembers, target.name, {
398
+ name: inverseProp,
399
+ target: modelTypeName(context, model),
400
+ list: true,
401
+ nullable: false,
402
+ });
403
+ continue;
404
+ }
405
+ const scalarProp = names.scalars.get(relation.name);
406
+ if (scalarProp !== undefined) {
407
+ let keySchema = referencedSchema(context, target, relation.toField);
408
+ if (keySchema === undefined) {
409
+ context.warnings.push(`${label}: target model "${target.name}" has no single-column primary key to reference; the foreign key "${scalarProp}" is validated as unknown.`);
410
+ keySchema = 'z.unknown()';
411
+ }
412
+ scalars.push({
413
+ name: scalarProp,
414
+ schema: keySchema,
415
+ nullable: relation.isNullable && keySchema !== 'z.unknown()',
416
+ omitOnCreate: false,
417
+ optionalOnCreate: relation.isNullable,
418
+ });
419
+ }
420
+ relations.push({
421
+ name: relationProp,
422
+ target: targetName,
423
+ list: false,
424
+ nullable: relation.isNullable,
425
+ });
426
+ addReverse(reverseMembers, target.name, {
427
+ name: inverseProp,
428
+ target: modelTypeName(context, model),
429
+ list: relation.kind !== 'oneToOne',
430
+ nullable: relation.kind === 'oneToOne',
431
+ });
432
+ }
433
+ return { scalars, relations };
434
+ }
435
+ function addReverse(reverseMembers, targetName, member) {
436
+ const existing = reverseMembers.get(targetName) ?? [];
437
+ existing.push(member);
438
+ reverseMembers.set(targetName, existing);
439
+ }
440
+ // ---------------------------------------------------------------------------
441
+ // Models
442
+ // ---------------------------------------------------------------------------
443
+ function scalarLine(scalar) {
444
+ return ` ${memberKey(scalar.name)}: ${scalar.schema}${scalar.nullable ? '.nullable()' : ''},`;
445
+ }
446
+ /** Writes `{ a: true, b: true }` for the given property names. */
447
+ function mask(names) {
448
+ return `{ ${names.map((name) => `${memberKey(name)}: true`).join(', ')} }`;
449
+ }
450
+ function emitModel(context, model, scalars, relations) {
451
+ const name = modelTypeName(context, model);
452
+ const lines = [`export const ${name}Schema = z.object({`];
453
+ for (const scalar of scalars) {
454
+ lines.push(scalarLine(scalar));
455
+ }
456
+ lines.push('});', `export type ${name} = z.infer<typeof ${name}Schema>;`);
457
+ if (model.isView !== true) {
458
+ const omitted = scalars
459
+ .filter((scalar) => scalar.omitOnCreate)
460
+ .map((scalar) => scalar.name);
461
+ const optional = scalars
462
+ .filter((scalar) => scalar.optionalOnCreate)
463
+ .map((scalar) => scalar.name);
464
+ const create = `${name}Schema${omitted.length === 0 ? '' : `.omit(${mask(omitted)})`}${optional.length === 0 ? '' : `.partial(${mask(optional)})`}`;
465
+ lines.push('', `export const ${name}CreateSchema = ${create};`, `export type ${name}Create = z.infer<typeof ${name}CreateSchema>;`, '', `export const ${name}UpdateSchema = ${name}CreateSchema.partial();`, `export type ${name}Update = z.infer<typeof ${name}UpdateSchema>;`);
466
+ }
467
+ if (relations.length > 0) {
468
+ lines.push('', ...relationLines(name, relations));
469
+ }
470
+ return lines.join('\n');
471
+ }
472
+ /**
473
+ * The `WithRelations` type is written out by hand and annotates the schema, because the
474
+ * schemas refer to each other and TypeScript cannot infer a type that depends on itself.
475
+ */
476
+ function relationLines(name, relations) {
477
+ const typeLines = [];
478
+ const schemaLines = [];
479
+ for (const relation of relations) {
480
+ const key = memberKey(relation.name);
481
+ const related = `${relation.target}WithRelations`;
482
+ const typeText = `${related}${relation.list ? '[]' : ''}${relation.nullable ? ' | null' : ''}`;
483
+ typeLines.push(` ${key}?: ${typeText};`);
484
+ const lazy = relation.list
485
+ ? `z.array(z.lazy(() => ${related}Schema))`
486
+ : `z.lazy(() => ${related}Schema)`;
487
+ schemaLines.push(` ${key}: ${lazy}${relation.nullable ? '.nullable()' : ''}.optional(),`);
488
+ }
489
+ return [
490
+ `export type ${name}WithRelations = ${name} & {`,
491
+ ...typeLines,
492
+ '};',
493
+ `export const ${name}WithRelationsSchema: z.ZodType<${name}WithRelations> = ${name}Schema.extend({`,
494
+ ...schemaLines,
495
+ '});',
496
+ ];
497
+ }
498
+ //# sourceMappingURL=zod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zod.js","sourceRoot":"","sources":["../../src/emitters/zod.ts"],"names":[],"mappings":"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"}
package/dist/formats.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { type EmitOutput, type PrismaProvider } from './emitters/prisma.js';
2
+ import { type SqlAlchemyStyle } from './emitters/sqlalchemy.js';
2
3
  import type { IrSchema } from './ir.js';
3
4
  import { type Result } from './result.js';
4
5
  import { type NamingMode } from './transforms.js';
@@ -15,7 +16,10 @@ export interface SourceText {
15
16
  export interface FormatOptions {
16
17
  /** "preserve" keeps existing database names; "normalize" applies a fresh-schema style. */
17
18
  naming: NamingMode;
18
- /** Prisma datasource provider; controls native column types such as @db.VarChar. */
19
+ /**
20
+ * Database provider. Prisma uses it for native column types such as @db.VarChar, Drizzle and GORM
21
+ * for the dialect, and the SQL DDL emitter for the SQL it writes (postgresql, mysql, sqlite, sqlserver).
22
+ */
19
23
  provider: PrismaProvider;
20
24
  /** Emit Prisma generator and datasource blocks. */
21
25
  header: boolean;
@@ -32,6 +36,12 @@ export interface FormatOptions {
32
36
  namespace?: string;
33
37
  /** Go package name of the generated GORM models (default `models`); also the output directory. */
34
38
  goPackage?: string;
39
+ /**
40
+ * Flavour of the SQLAlchemy output: `sqlalchemy` (default; `DeclarativeBase`, `Mapped[...]` and
41
+ * `mapped_column`) or `sqlmodel` (`SQLModel, table=True` classes with `Field` and `Relationship`).
42
+ * Only the `sqlalchemy` format reads it.
43
+ */
44
+ style?: SqlAlchemyStyle;
35
45
  }
36
46
  /**
37
47
  * Output of an emitter that produces several files. `files` maps a relative