import { ServiceLocator } from "../ioc"; import { EntitiesServiceLocator, EntityServiceLocator } from "../providers/services"; import { IEntityAdapter } from "./adapters"; import { IAuthenticationContext, IAuthenticationContextProvider } from "./authentication"; import { IEntityAuthorizationMiddleware } from "./authorization"; import { SortingType } from "./common"; import { ConnectorOptions, IEntityConnector } from "./connectors"; import { IEntityConverter } from "./converters"; import { IEntityMapper } from "./mappers"; import { IEntitiesQueryBuilder } from "./queries"; import { ReplicaOptions } from "./replication"; import { IEntityRepository } from "./repository"; import { IEntitySearchParameters } from "./searchParameters"; import { IEntityFacets } from "./searchResults"; import { IEntitySerializer } from "./serializer"; import { IEntityConfiguration, EntityManagerSettings } from "./settings"; import { IEntitySnapshotService } from "./snapshot"; export type EntitiesMapOperationsInput = { queryBuilder: TEntitiesQueryBuilder; settings: EntityManagerSettings; }; export interface IEntityManagerServiceRoot { locator: ServiceLocator; getEntitiesServicesLocator(): EntitiesServiceLocator; getEntityServicesLocator(entityName: string): EntityServiceLocator; addAuthentication, TUserContext>({ provider, }: { provider: TAuthenticationContextProvider; }): void; registerEntity>(entity: IEntityConfiguration, repository: TRepository): IEntityManagerServiceCollection; } export interface IEntityManagerServiceCollection { getServiceLocator(): EntityServiceLocator; mapCrudOperations, TSorting extends SortingType, TCursor, TFacets extends IEntityFacets, TEntitiesQueryBuilder extends IEntitiesQueryBuilder>(input: EntitiesMapOperationsInput): IEntityManagerServiceCollection; addSerializer>(serializer: TEntitySerializer): IEntityManagerServiceCollection; addSnapshotService>(service: TEntitySnapshotService): IEntityManagerServiceCollection; addConverter>(converter: TEntityConverter): IEntityManagerServiceCollection; addAdapter>(adapter: TEntityAdapter): IEntityManagerServiceCollection; addAuthorization, TAuthenticationContext extends IAuthenticationContext, TUserContext>({ middleware, }: { middleware: TEntityAuthorizationMiddleware; }): IEntityManagerServiceCollection; withReplica>({ name, options, repository, }: { name: string; options: ReplicaOptions; repository: TRepository; }): IEntityManagerServiceCollection; withSynchronization, TEntityConnector extends IEntityConnector>({ name, options, connector, mapper, }: { name: string; options: ConnectorOptions; connector: TEntityConnector; mapper: TMapper; }): IEntityManagerServiceCollection; }