normalizeRelation() — drizzle-orm Function Reference
Architecture documentation for the normalizeRelation() function in relations.ts from the drizzle-orm codebase.
Entity Profile
Dependency Diagram
graph TD 95b7f368_fe07_2aac_c3ae_6c1fc186391c["normalizeRelation()"] 2f47d090_425d_2e56_2395_4c4d912316f0["relations.ts"] 95b7f368_fe07_2aac_c3ae_6c1fc186391c -->|defined in| 2f47d090_425d_2e56_2395_4c4d912316f0 c020d230_75a2_3639_d9a6_35f2ba7fd5bc["is()"] 95b7f368_fe07_2aac_c3ae_6c1fc186391c -->|calls| c020d230_75a2_3639_d9a6_35f2ba7fd5bc style 95b7f368_fe07_2aac_c3ae_6c1fc186391c fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
drizzle-orm/src/relations.ts lines 559–634
export function normalizeRelation(
schema: TablesRelationalConfig,
tableNamesMap: Record<string, string>,
relation: Relation,
): NormalizedRelation {
if (is(relation, One) && relation.config) {
return {
fields: relation.config.fields,
references: relation.config.references,
};
}
const referencedTableTsName = tableNamesMap[getTableUniqueName(relation.referencedTable)];
if (!referencedTableTsName) {
throw new Error(
`Table "${relation.referencedTable[Table.Symbol.Name]}" not found in schema`,
);
}
const referencedTableConfig = schema[referencedTableTsName];
if (!referencedTableConfig) {
throw new Error(`Table "${referencedTableTsName}" not found in schema`);
}
const sourceTable = relation.sourceTable;
const sourceTableTsName = tableNamesMap[getTableUniqueName(sourceTable)];
if (!sourceTableTsName) {
throw new Error(
`Table "${sourceTable[Table.Symbol.Name]}" not found in schema`,
);
}
const reverseRelations: Relation[] = [];
for (
const referencedTableRelation of Object.values(
referencedTableConfig.relations,
)
) {
if (
(relation.relationName
&& relation !== referencedTableRelation
&& referencedTableRelation.relationName === relation.relationName)
|| (!relation.relationName
&& referencedTableRelation.referencedTable === relation.sourceTable)
) {
reverseRelations.push(referencedTableRelation);
}
}
if (reverseRelations.length > 1) {
throw relation.relationName
? new Error(
`There are multiple relations with name "${relation.relationName}" in table "${referencedTableTsName}"`,
)
: new Error(
`There are multiple relations between "${referencedTableTsName}" and "${
relation.sourceTable[Table.Symbol.Name]
}". Please specify relation name`,
);
}
if (
reverseRelations[0]
&& is(reverseRelations[0], One)
&& reverseRelations[0].config
) {
return {
fields: reverseRelations[0].config.references,
references: reverseRelations[0].config.fields,
};
}
throw new Error(
`There is not enough information to infer relation "${sourceTableTsName}.${relation.fieldName}"`,
);
}
Domain
Subdomains
Defined In
Calls
Source
Frequently Asked Questions
What does normalizeRelation() do?
normalizeRelation() is a function in the drizzle-orm codebase, defined in drizzle-orm/src/relations.ts.
Where is normalizeRelation() defined?
normalizeRelation() is defined in drizzle-orm/src/relations.ts at line 559.
What does normalizeRelation() call?
normalizeRelation() calls 1 function(s): is.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free