From 2cbb129f5efab59d607908c891b55cc5e03f8020 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ad=C3=A1mek?= Date: Wed, 2 Nov 2022 09:15:38 +0100 Subject: [PATCH] feat(core): add `EntityOptions.repository` shortcut --- packages/core/src/decorators/Entity.ts | 2 ++ packages/core/src/typings.ts | 4 ++++ tests/entities/Author.ts | 2 +- tests/entities/Book.ts | 2 +- tests/issues/GH1231.test.ts | 2 +- tests/issues/GH2647.test.ts | 10 +++++----- 6 files changed, 14 insertions(+), 8 deletions(-) diff --git a/packages/core/src/decorators/Entity.ts b/packages/core/src/decorators/Entity.ts index f895ff307a0f..9c7ae1628c7d 100644 --- a/packages/core/src/decorators/Entity.ts +++ b/packages/core/src/decorators/Entity.ts @@ -32,4 +32,6 @@ export type EntityOptions = { // also return type is unknown as it can be either QB instance (which we cannot type here) or array of POJOs (e.g. for mongodb) expression?: string | ((em: any, where: FilterQuery, options: FindOptions) => object); customRepository?: () => Constructor; + /** shortcut for `customRepository` */ + repository?: () => Constructor; }; diff --git a/packages/core/src/typings.ts b/packages/core/src/typings.ts index 9eed4a2fe0e3..81b646d8c80f 100644 --- a/packages/core/src/typings.ts +++ b/packages/core/src/typings.ts @@ -363,6 +363,10 @@ export class EntityMetadata { this.collection = name; } + set repository(repo: () => Constructor>) { + this.customRepository = repo; + } + sync(initIndexes = false) { this.root ??= this; const props = Object.values>(this.properties).sort((a, b) => this.propertyOrder.get(a.name)! - this.propertyOrder.get(b.name)!); diff --git a/tests/entities/Author.ts b/tests/entities/Author.ts index 6ec96d799dd0..0ec18b62120e 100644 --- a/tests/entities/Author.ts +++ b/tests/entities/Author.ts @@ -8,7 +8,7 @@ import { Book } from './Book'; import { AuthorRepository } from '../repositories/AuthorRepository'; import { BaseEntity } from './BaseEntity'; -@Entity({ customRepository: () => AuthorRepository }) +@Entity({ repository: () => AuthorRepository }) @Index({ name: 'custom_idx_1', properties: ['name', 'email'] }) @Filter({ name: 'withoutParams1', diff --git a/tests/entities/Book.ts b/tests/entities/Book.ts index 59f7bd17ee93..3ed79c3da380 100644 --- a/tests/entities/Book.ts +++ b/tests/entities/Book.ts @@ -6,7 +6,7 @@ import { BookTag } from './book-tag'; import { BaseEntity3 } from './BaseEntity3'; import { BookRepository } from '../repositories/BookRepository'; -@Entity({ tableName: 'books-table', customRepository: () => BookRepository }) +@Entity({ tableName: 'books-table', repository: () => BookRepository }) @Unique({ properties: ['title', 'author'] }) @Index({ properties: 'title', type: 'fulltext' }) @Index({ options: { point: '2dsphere', title: -1 } }) diff --git a/tests/issues/GH1231.test.ts b/tests/issues/GH1231.test.ts index 5fc6210a046b..142d36762c63 100644 --- a/tests/issues/GH1231.test.ts +++ b/tests/issues/GH1231.test.ts @@ -2,7 +2,7 @@ import { Cascade, Collection, Entity, EntityRepositoryType, ManyToOne, MikroORM, import type { PostgreSqlDriver } from '@mikro-orm/postgresql'; import { EntityRepository } from '@mikro-orm/postgresql'; -@Entity({ tableName: 'teachers', customRepository: () => TeacherRepository }) +@Entity({ tableName: 'teachers', repository: () => TeacherRepository }) class Teacher { constructor(firstName: string, lastName: string) { diff --git a/tests/issues/GH2647.test.ts b/tests/issues/GH2647.test.ts index 8c9c21b1c299..2f6c5c883c54 100644 --- a/tests/issues/GH2647.test.ts +++ b/tests/issues/GH2647.test.ts @@ -13,7 +13,7 @@ class ParticipantRepository extends EntityRepository { } -@Entity({ customRepository: () => ProviderRepository }) +@Entity({ repository: () => ProviderRepository }) export class Provider { [EntityRepositoryType]?: ProviderRepository; @@ -27,7 +27,7 @@ export class Provider { } -@Entity({ customRepository: () => UserRepository }) +@Entity({ repository: () => UserRepository }) export class User { [EntityRepositoryType]?: UserRepository; @@ -41,7 +41,7 @@ export class User { } -@Entity({ customRepository: () => MemberRepository }) +@Entity({ repository: () => MemberRepository }) export class Member { [EntityRepositoryType]?: MemberRepository; @@ -59,7 +59,7 @@ export class Member { } -@Entity({ customRepository: () => SessionRepository }) +@Entity({ repository: () => SessionRepository }) export class Session { [EntityRepositoryType]?: SessionRepository; @@ -80,7 +80,7 @@ export class Session { } -@Entity({ customRepository: () => ParticipantRepository }) +@Entity({ repository: () => ParticipantRepository }) export class Participant { [EntityRepositoryType]?: ParticipantRepository;