diff --git a/src/generator/dbml.ts b/src/generator/dbml.ts index 87a097f..e9a8bfa 100644 --- a/src/generator/dbml.ts +++ b/src/generator/dbml.ts @@ -4,6 +4,7 @@ import { generateEnums } from './enums'; import { generateRelations } from './relations'; import { generateManyToManyTables } from './many-to-many-tables'; import { generateProject, ProjectOptions } from './project'; +import { generateGroups } from './groups'; export const autoGeneratedComment = `//// ------------------------------------------------------ //// THIS FILE WAS AUTOMATICALLY GENERATED (DO NOT MODIFY) @@ -27,10 +28,12 @@ export function generateDBMLSchema( const enums = generateEnums(dmmf.datamodel.enums); const refs = generateRelations(dmmf.datamodel.models, mapToDbSchema); const project = projectOptions ? generateProject(projectOptions) : []; + const groups = generateGroups(dmmf.datamodel.models) return [ autoGeneratedComment, ...project, + ...groups, ...tables, ...manyToManyTables, ...enums, diff --git a/src/generator/groups.ts b/src/generator/groups.ts new file mode 100644 index 0000000..7953840 --- /dev/null +++ b/src/generator/groups.ts @@ -0,0 +1,16 @@ +import { DMMF } from '@prisma/generator-helper'; + +export function generateGroups( + models: DMMF.Model[] +): string[] { + return models + // Only care about dbName + .map(m => m.dbName.split('_')[0]) + // Keep only groups that occur _more_ than once + .filter((v, i, a) => a.indexOf(v) !== i) + // Remove duplicates + .filter((v, i, a) => a.indexOf(v) === i) + .map((group) => `TableGroup ${group} { + ${models.filter(m => m.dbName.split('_')[0] === group).map(t => t.dbName).join('\n ')} +}`) +}