Skip to content

Commit 57c2d5b

Browse files
committed
fix: add fuzzy table name matching for v5 camelCase codec relation targets
1 parent 6c9175e commit 57c2d5b

2 files changed

Lines changed: 14 additions & 3 deletions

File tree

graphql/query/src/generators/field-selector.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -298,12 +298,12 @@ function getRelatedTableScalarFields(
298298
// - table.name: PascalCase tableType (e.g., "Shipment", "DriverVehicleAssignment")
299299
// - relation referencedBy.name: raw codec name (e.g., "shipments", "driverVehicleAssignments")
300300
// Try exact match first, then case-insensitive match with optional trailing 's' for plural.
301-
const nameLower = referencedTableName.toLowerCase();
301+
const nameLower = referencedTableName.toLowerCase().replace(/_/g, '');
302302
const nameBase = nameLower.endsWith('s') ? nameLower.slice(0, -1) : nameLower;
303303
const relatedTable =
304304
allTables.find((t) => t.name === referencedTableName) ??
305305
allTables.find((t) => {
306-
const tLower = t.name.toLowerCase();
306+
const tLower = t.name.toLowerCase().replace(/_/g, '');
307307
return tLower === nameLower || tLower === nameBase;
308308
});
309309
if (!relatedTable) {

graphql/query/src/generators/select.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -788,7 +788,18 @@ function findRelatedTable(
788788
}
789789

790790
// Find the related table in allTables
791-
return allTables.find((tbl) => tbl.name === referencedTableName) || null;
791+
const exactMatch = allTables.find((tbl) => tbl.name === referencedTableName);
792+
if (exactMatch) return exactMatch;
793+
794+
// Fuzzy match: case-insensitive, strip underscores, optional trailing 's'.
795+
// Needed because relation target names from _meta use snake_case codec names
796+
// (e.g. "routes", "delivery_zone") while allTables[].name is PascalCase (e.g. "Route", "DeliveryZone").
797+
const nameLower = referencedTableName.toLowerCase().replace(/_/g, '');
798+
const nameBase = nameLower.endsWith('s') ? nameLower.slice(0, -1) : nameLower;
799+
return allTables.find((tbl) => {
800+
const tLower = tbl.name.toLowerCase().replace(/_/g, '');
801+
return tLower === nameLower || tLower === nameBase;
802+
}) || null;
792803
}
793804

794805
/**

0 commit comments

Comments
 (0)