MCPcopy
hub / github.com/drizzle-team/drizzle-orm / normalizeRelation

Function normalizeRelation

drizzle-orm/src/relations.ts:559–634  ·  view source on GitHub ↗
(
	schema: TablesRelationalConfig,
	tableNamesMap: Record<string, string>,
	relation: Relation,
)

Source from the content-addressed store, hash-verified

557}
558
559export function normalizeRelation(
560 schema: TablesRelationalConfig,
561 tableNamesMap: Record<string, string>,
562 relation: Relation,
563): NormalizedRelation {
564 if (is(relation, One) && relation.config) {
565 return {
566 fields: relation.config.fields,
567 references: relation.config.references,
568 };
569 }
570
571 const referencedTableTsName = tableNamesMap[getTableUniqueName(relation.referencedTable)];
572 if (!referencedTableTsName) {
573 throw new Error(
574 `Table "${relation.referencedTable[Table.Symbol.Name]}" not found in schema`,
575 );
576 }
577
578 const referencedTableConfig = schema[referencedTableTsName];
579 if (!referencedTableConfig) {
580 throw new Error(`Table "${referencedTableTsName}" not found in schema`);
581 }
582
583 const sourceTable = relation.sourceTable;
584 const sourceTableTsName = tableNamesMap[getTableUniqueName(sourceTable)];
585 if (!sourceTableTsName) {
586 throw new Error(
587 `Table "${sourceTable[Table.Symbol.Name]}" not found in schema`,
588 );
589 }
590
591 const reverseRelations: Relation[] = [];
592 for (
593 const referencedTableRelation of Object.values(
594 referencedTableConfig.relations,
595 )
596 ) {
597 if (
598 (relation.relationName
599 && relation !== referencedTableRelation
600 && referencedTableRelation.relationName === relation.relationName)
601 || (!relation.relationName
602 && referencedTableRelation.referencedTable === relation.sourceTable)
603 ) {
604 reverseRelations.push(referencedTableRelation);
605 }
606 }
607
608 if (reverseRelations.length > 1) {
609 throw relation.relationName
610 ? new Error(
611 `There are multiple relations with name "${relation.relationName}" in table "${referencedTableTsName}"`,
612 )
613 : new Error(
614 `There are multiple relations between "${referencedTableTsName}" and "${
615 relation.sourceTable[Table.Symbol.Name]
616 }". Please specify relation name`,

Calls 3

isFunction · 0.90
getTableUniqueNameFunction · 0.90
valuesMethod · 0.45

Tested by

no test coverage detected