(
schema: Record<string, PgTable | Relations>,
getDbToTsColumnNamesMap: (table: PgTable) => {
[dbColName: string]: string;
},
tableRelations: {
[tableName: string]: RelationWithReferences[];
},
)
| 604 | }; |
| 605 | |
| 606 | const transformFromDrizzleRelation = ( |
| 607 | schema: Record<string, PgTable | Relations>, |
| 608 | getDbToTsColumnNamesMap: (table: PgTable) => { |
| 609 | [dbColName: string]: string; |
| 610 | }, |
| 611 | tableRelations: { |
| 612 | [tableName: string]: RelationWithReferences[]; |
| 613 | }, |
| 614 | ) => { |
| 615 | const schemaConfig = extractTablesRelationalConfig(schema, createTableRelationsHelpers); |
| 616 | const relations: RelationWithReferences[] = []; |
| 617 | for (const table of Object.values(schemaConfig.tables)) { |
| 618 | if (table.relations === undefined) continue; |
| 619 | |
| 620 | for (const drizzleRel of Object.values(table.relations)) { |
| 621 | if (!is(drizzleRel, One)) continue; |
| 622 | |
| 623 | const tableConfig = getPgTableConfig(drizzleRel.sourceTable as PgTable); |
| 624 | const tableDbSchema = tableConfig.schema ?? 'public'; |
| 625 | const tableDbName = tableConfig.name; |
| 626 | const tableTsName = schemaConfig.tableNamesMap[`${tableDbSchema}.${tableDbName}`] ?? tableDbName; |
| 627 | |
| 628 | const dbToTsColumnNamesMap = getDbToTsColumnNamesMap(drizzleRel.sourceTable); |
| 629 | const columns = drizzleRel.config?.fields.map((field) => dbToTsColumnNamesMap[field.name] as string) |
| 630 | ?? []; |
| 631 | |
| 632 | const refTableConfig = getPgTableConfig(drizzleRel.referencedTable as PgTable); |
| 633 | const refTableDbSchema = refTableConfig.schema ?? 'public'; |
| 634 | const refTableDbName = refTableConfig.name; |
| 635 | const refTableTsName = schemaConfig.tableNamesMap[`${refTableDbSchema}.${refTableDbName}`] |
| 636 | ?? refTableDbName; |
| 637 | |
| 638 | const dbToTsColumnNamesMapForRefTable = getDbToTsColumnNamesMap(drizzleRel.referencedTable); |
| 639 | const refColumns = drizzleRel.config?.references.map((ref) => |
| 640 | dbToTsColumnNamesMapForRefTable[ref.name] as string |
| 641 | ) |
| 642 | ?? []; |
| 643 | |
| 644 | if (tableRelations[refTableTsName] === undefined) { |
| 645 | tableRelations[refTableTsName] = []; |
| 646 | } |
| 647 | |
| 648 | const relation: RelationWithReferences = { |
| 649 | table: tableTsName, |
| 650 | columns, |
| 651 | refTable: refTableTsName, |
| 652 | refColumns, |
| 653 | refTableRels: tableRelations[refTableTsName], |
| 654 | type: 'one', |
| 655 | }; |
| 656 | |
| 657 | // do not add duplicate relation |
| 658 | if ( |
| 659 | tableRelations[tableTsName]?.some((rel) => |
| 660 | rel.table === relation.table |
| 661 | && rel.refTable === relation.refTable |
| 662 | ) |
| 663 | ) { |
no test coverage detected