( schema: TablesRelationalConfig, tableNamesMap: Record<string, string>, relation: Relation, )
| 557 | } |
| 558 | |
| 559 | export 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`, |
no test coverage detected