relationsToTypeScriptForStudio() — drizzle-orm Function Reference
Architecture documentation for the relationsToTypeScriptForStudio() function in introspect-pg.ts from the drizzle-orm codebase.
Entity Profile
Dependency Diagram
graph TD 0e89f7cd_3c24_fd23_c2b1_c420cfd92ae8["relationsToTypeScriptForStudio()"] 71516551_23e3_bf30_27c9_000fb046ef71["introspect-pg.ts"] 0e89f7cd_3c24_fd23_c2b1_c420cfd92ae8 -->|defined in| 71516551_23e3_bf30_27c9_000fb046ef71 style 0e89f7cd_3c24_fd23_c2b1_c420cfd92ae8 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
drizzle-kit/src/introspect-pg.ts lines 190–275
export const relationsToTypeScriptForStudio = (
schema: Record<string, Record<string, AnyPgTable<{}>>>,
relations: Record<string, Relations<string, Record<string, Relation<string>>>>,
) => {
const relationalSchema: Record<string, unknown> = {
...Object.fromEntries(
Object.entries(schema)
.map(([key, val]) => {
// have unique keys across schemas
const mappedTableEntries = Object.entries(val).map((tableEntry) => {
return [`__${key}__.${tableEntry[0]}`, tableEntry[1]];
});
return mappedTableEntries;
})
.flat(),
),
...relations,
};
const relationsConfig = extractTablesRelationalConfig(relationalSchema, createTableRelationsHelpers);
let result = '';
function findColumnKey(table: AnyPgTable, columnName: string) {
for (const tableEntry of Object.entries(table)) {
const key = tableEntry[0];
const value = tableEntry[1];
if (value.name === columnName) {
return key;
}
}
}
Object.values(relationsConfig.tables).forEach((table) => {
const tableName = table.tsName.split('.')[1];
const relations = table.relations;
let hasRelations = false;
let relationsObjAsStr = '';
let hasOne = false;
let hasMany = false;
Object.values(relations).forEach((relation) => {
hasRelations = true;
if (is(relation, Many)) {
hasMany = true;
relationsObjAsStr += `\t\t${relation.fieldName}: many(${
relationsConfig.tableNamesMap[relation.referencedTableName].split('.')[1]
}${typeof relation.relationName !== 'undefined' ? `, { relationName: "${relation.relationName}"}` : ''}),`;
}
if (is(relation, One)) {
hasOne = true;
relationsObjAsStr += `\t\t${relation.fieldName}: one(${
relationsConfig.tableNamesMap[relation.referencedTableName].split('.')[1]
}, { fields: [${
relation.config?.fields.map(
(c) =>
`${relationsConfig.tableNamesMap[getTableName(relation.sourceTable)].split('.')[1]}.${
findColumnKey(relation.sourceTable, c.name)
}`,
)
}], references: [${
relation.config?.references.map(
(c) =>
`${relationsConfig.tableNamesMap[getTableName(relation.referencedTable)].split('.')[1]}.${
findColumnKey(relation.referencedTable, c.name)
}`,
)
}]${typeof relation.relationName !== 'undefined' ? `, relationName: "${relation.relationName}"` : ''}}),`;
}
});
if (hasRelations) {
result += `export const ${tableName}Relation = relations(${tableName}, ({${hasOne ? 'one' : ''}${
hasOne && hasMany ? ', ' : ''
}${hasMany ? 'many' : ''}}) => ({
${relationsObjAsStr}
}));\n`;
Domain
Subdomains
Defined In
Source
Frequently Asked Questions
What does relationsToTypeScriptForStudio() do?
relationsToTypeScriptForStudio() is a function in the drizzle-orm codebase, defined in drizzle-kit/src/introspect-pg.ts.
Where is relationsToTypeScriptForStudio() defined?
relationsToTypeScriptForStudio() is defined in drizzle-kit/src/introspect-pg.ts at line 190.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free