diff --git a/src/lib/repository.ts b/src/lib/repository.ts index 4f03168..66ae220 100644 --- a/src/lib/repository.ts +++ b/src/lib/repository.ts @@ -111,7 +111,7 @@ export class Repository< return this.filterFragmentBuilderRegistry; } - join( + join>( type: AnyJoin["type"], modelName1: N1, modelName2: N2, @@ -122,6 +122,10 @@ export class Repository< invariant(model1, `Model ${model1} not found in repository`); invariant(model2, `Model ${model2} not found in repository`); + invariant( + model1.name !== model2.name, + `Model ${model1.name} cannot be joined to itself`, + ); const joinSqlDef = (context: C) => { const models = { @@ -161,7 +165,7 @@ export class Repository< return this; } - joinOneToOne( + joinOneToOne>( model1: N1, model2: N2, joinSqlDefFn: JoinFn, @@ -169,7 +173,7 @@ export class Repository< return this.join("oneToOne", model1, model2, joinSqlDefFn); } - joinOneToMany( + joinOneToMany>( model1: N1, model2: N2, joinSqlDefFn: JoinFn, @@ -177,7 +181,7 @@ export class Repository< return this.join("oneToMany", model1, model2, joinSqlDefFn); } - joinManyToOne( + joinManyToOne>( model1: N1, model2: N2, joinSqlDefFn: JoinFn, @@ -185,7 +189,7 @@ export class Repository< return this.join("manyToOne", model1, model2, joinSqlDefFn); } - joinManyToMany( + joinManyToMany>( model1: N1, model2: N2, joinSqlDefFn: JoinFn,