@punks/backend-entity-manager 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/dist/cjs/index.js +15184 -0
  2. package/dist/cjs/index.js.map +1 -0
  3. package/dist/cjs/types/__test__/base/test-actions-plain.test.d.ts +1 -0
  4. package/dist/cjs/types/__test__/base/test-actions-with-converters.test.d.ts +1 -0
  5. package/dist/cjs/types/__test__/base/test-default-entity-manager.test.d.ts +1 -0
  6. package/dist/cjs/types/__test__/entity/foo.d.ts +72 -0
  7. package/dist/cjs/types/__test__/providers/typeorm/entity/foo.d.ts +73 -0
  8. package/dist/cjs/types/__test__/providers/typeorm/mock/index.d.ts +7 -0
  9. package/dist/cjs/types/__test__/providers/typeorm/test-typeorm-actions.test.d.ts +1 -0
  10. package/dist/cjs/types/abstractions/actions.d.ts +29 -0
  11. package/dist/cjs/types/abstractions/authorization.d.ts +9 -0
  12. package/dist/cjs/types/abstractions/commands.d.ts +12 -0
  13. package/dist/cjs/types/abstractions/common.d.ts +11 -0
  14. package/dist/cjs/types/abstractions/configuration.d.ts +34 -0
  15. package/dist/cjs/types/abstractions/connectors.d.ts +30 -0
  16. package/dist/cjs/types/abstractions/converters.d.ts +24 -0
  17. package/dist/cjs/types/abstractions/errors.d.ts +24 -0
  18. package/dist/cjs/types/abstractions/events.d.ts +5 -0
  19. package/dist/cjs/types/abstractions/filters.d.ts +1 -0
  20. package/dist/cjs/types/abstractions/index.d.ts +15 -0
  21. package/dist/cjs/types/abstractions/ioc.d.ts +12 -0
  22. package/dist/cjs/types/abstractions/manager.d.ts +12 -0
  23. package/dist/cjs/types/abstractions/mappers.d.ts +3 -0
  24. package/dist/cjs/types/abstractions/queries.d.ts +12 -0
  25. package/dist/cjs/types/abstractions/replication.d.ts +25 -0
  26. package/dist/cjs/types/abstractions/repository.d.ts +15 -0
  27. package/dist/cjs/types/abstractions/searchParameters.d.ts +26 -0
  28. package/dist/cjs/types/abstractions/searchResults.d.ts +16 -0
  29. package/dist/cjs/types/actions/create.d.ts +8 -0
  30. package/dist/cjs/types/actions/delete.d.ts +7 -0
  31. package/dist/cjs/types/actions/get.d.ts +7 -0
  32. package/dist/cjs/types/actions/search.d.ts +10 -0
  33. package/dist/cjs/types/actions/update.d.ts +7 -0
  34. package/dist/cjs/types/actions/upsert.d.ts +7 -0
  35. package/dist/cjs/types/authorization/allowAll.d.ts +13 -0
  36. package/dist/cjs/types/commands/create.d.ts +9 -0
  37. package/dist/cjs/types/commands/delete.d.ts +8 -0
  38. package/dist/cjs/types/commands/update.d.ts +9 -0
  39. package/dist/cjs/types/commands/upsert.d.ts +10 -0
  40. package/dist/cjs/types/concrete/index.d.ts +27 -0
  41. package/dist/cjs/types/configuration/connectors.d.ts +8 -0
  42. package/dist/cjs/types/configuration/index.d.ts +1 -0
  43. package/dist/cjs/types/configuration/replicas.d.ts +8 -0
  44. package/dist/cjs/types/configuration/root.d.ts +2 -0
  45. package/dist/cjs/types/decorators/decorators.test.d.ts +2 -0
  46. package/dist/cjs/types/decorators/index.d.ts +3 -0
  47. package/dist/cjs/types/index.d.ts +2 -0
  48. package/dist/cjs/types/integrations/repository/typeorm/index.d.ts +1 -0
  49. package/dist/cjs/types/integrations/repository/typeorm/repository.d.ts +22 -0
  50. package/dist/cjs/types/ioc/index.d.ts +13 -0
  51. package/dist/cjs/types/models/index.d.ts +1 -0
  52. package/dist/cjs/types/models/search.d.ts +17 -0
  53. package/dist/cjs/types/platforms/index.d.ts +1 -0
  54. package/dist/cjs/types/platforms/nest/index.d.ts +1 -0
  55. package/dist/cjs/types/platforms/nest/ioc/container/index.d.ts +3 -0
  56. package/dist/cjs/types/platforms/nest/module.d.ts +5 -0
  57. package/dist/cjs/types/platforms/nest/services/manager/index.d.ts +2 -0
  58. package/dist/cjs/types/providers/services.d.ts +114 -0
  59. package/dist/cjs/types/queries/get.d.ts +8 -0
  60. package/dist/cjs/types/queries/search.d.ts +10 -0
  61. package/dist/cjs/types/reflection/index.d.ts +1 -0
  62. package/dist/cjs/types/services/connectors.d.ts +13 -0
  63. package/dist/cjs/types/services/events.d.ts +9 -0
  64. package/dist/cjs/types/services/replication.d.ts +12 -0
  65. package/dist/cjs/types/symbols/ioc.d.ts +54 -0
  66. package/dist/cjs/types/testing/mocks/repository.d.ts +20 -0
  67. package/dist/esm/index.js +15170 -0
  68. package/dist/esm/index.js.map +1 -0
  69. package/dist/esm/types/__test__/base/test-actions-plain.test.d.ts +1 -0
  70. package/dist/esm/types/__test__/base/test-actions-with-converters.test.d.ts +1 -0
  71. package/dist/esm/types/__test__/base/test-default-entity-manager.test.d.ts +1 -0
  72. package/dist/esm/types/__test__/entity/foo.d.ts +72 -0
  73. package/dist/esm/types/__test__/providers/typeorm/entity/foo.d.ts +73 -0
  74. package/dist/esm/types/__test__/providers/typeorm/mock/index.d.ts +7 -0
  75. package/dist/esm/types/__test__/providers/typeorm/test-typeorm-actions.test.d.ts +1 -0
  76. package/dist/esm/types/abstractions/actions.d.ts +29 -0
  77. package/dist/esm/types/abstractions/authorization.d.ts +9 -0
  78. package/dist/esm/types/abstractions/commands.d.ts +12 -0
  79. package/dist/esm/types/abstractions/common.d.ts +11 -0
  80. package/dist/esm/types/abstractions/configuration.d.ts +34 -0
  81. package/dist/esm/types/abstractions/connectors.d.ts +30 -0
  82. package/dist/esm/types/abstractions/converters.d.ts +24 -0
  83. package/dist/esm/types/abstractions/errors.d.ts +24 -0
  84. package/dist/esm/types/abstractions/events.d.ts +5 -0
  85. package/dist/esm/types/abstractions/filters.d.ts +1 -0
  86. package/dist/esm/types/abstractions/index.d.ts +15 -0
  87. package/dist/esm/types/abstractions/ioc.d.ts +12 -0
  88. package/dist/esm/types/abstractions/manager.d.ts +12 -0
  89. package/dist/esm/types/abstractions/mappers.d.ts +3 -0
  90. package/dist/esm/types/abstractions/queries.d.ts +12 -0
  91. package/dist/esm/types/abstractions/replication.d.ts +25 -0
  92. package/dist/esm/types/abstractions/repository.d.ts +15 -0
  93. package/dist/esm/types/abstractions/searchParameters.d.ts +26 -0
  94. package/dist/esm/types/abstractions/searchResults.d.ts +16 -0
  95. package/dist/esm/types/actions/create.d.ts +8 -0
  96. package/dist/esm/types/actions/delete.d.ts +7 -0
  97. package/dist/esm/types/actions/get.d.ts +7 -0
  98. package/dist/esm/types/actions/search.d.ts +10 -0
  99. package/dist/esm/types/actions/update.d.ts +7 -0
  100. package/dist/esm/types/actions/upsert.d.ts +7 -0
  101. package/dist/esm/types/authorization/allowAll.d.ts +13 -0
  102. package/dist/esm/types/commands/create.d.ts +9 -0
  103. package/dist/esm/types/commands/delete.d.ts +8 -0
  104. package/dist/esm/types/commands/update.d.ts +9 -0
  105. package/dist/esm/types/commands/upsert.d.ts +10 -0
  106. package/dist/esm/types/concrete/index.d.ts +27 -0
  107. package/dist/esm/types/configuration/connectors.d.ts +8 -0
  108. package/dist/esm/types/configuration/index.d.ts +1 -0
  109. package/dist/esm/types/configuration/replicas.d.ts +8 -0
  110. package/dist/esm/types/configuration/root.d.ts +2 -0
  111. package/dist/esm/types/decorators/decorators.test.d.ts +2 -0
  112. package/dist/esm/types/decorators/index.d.ts +3 -0
  113. package/dist/esm/types/index.d.ts +2 -0
  114. package/dist/esm/types/integrations/repository/typeorm/index.d.ts +1 -0
  115. package/dist/esm/types/integrations/repository/typeorm/repository.d.ts +22 -0
  116. package/dist/esm/types/ioc/index.d.ts +13 -0
  117. package/dist/esm/types/models/index.d.ts +1 -0
  118. package/dist/esm/types/models/search.d.ts +17 -0
  119. package/dist/esm/types/platforms/index.d.ts +1 -0
  120. package/dist/esm/types/platforms/nest/index.d.ts +1 -0
  121. package/dist/esm/types/platforms/nest/ioc/container/index.d.ts +3 -0
  122. package/dist/esm/types/platforms/nest/module.d.ts +5 -0
  123. package/dist/esm/types/platforms/nest/services/manager/index.d.ts +2 -0
  124. package/dist/esm/types/providers/services.d.ts +114 -0
  125. package/dist/esm/types/queries/get.d.ts +8 -0
  126. package/dist/esm/types/queries/search.d.ts +10 -0
  127. package/dist/esm/types/reflection/index.d.ts +1 -0
  128. package/dist/esm/types/services/connectors.d.ts +13 -0
  129. package/dist/esm/types/services/events.d.ts +9 -0
  130. package/dist/esm/types/services/replication.d.ts +12 -0
  131. package/dist/esm/types/symbols/ioc.d.ts +54 -0
  132. package/dist/esm/types/testing/mocks/repository.d.ts +20 -0
  133. package/dist/index.d.ts +431 -0
  134. package/package.json +62 -0
  135. package/readme.md +17 -0
@@ -0,0 +1,72 @@
1
+ import { IEntityManagerServiceRoot } from "../../abstractions/configuration";
2
+ import { IEntityConverter } from "../../abstractions/converters";
3
+ import { IEntitiesQueryBuilder } from "../../abstractions/queries";
4
+ import { IEntitySearchParameters } from "../../abstractions/searchParameters";
5
+ import { EntitiesSearchResults } from "../../models";
6
+ import { EntityServiceLocator } from "../../providers/services";
7
+ import { InMemoryRepository } from "../../testing/mocks/repository";
8
+ export interface FooEntity {
9
+ id: string;
10
+ name: string;
11
+ age: number;
12
+ updatedAt: Date;
13
+ }
14
+ export declare class FooRepository extends InMemoryRepository<FooEntity> {
15
+ }
16
+ export interface FooSearchFilters {
17
+ minAge?: number;
18
+ maxAge?: number;
19
+ }
20
+ export declare enum FooSorting {
21
+ Name = "Name",
22
+ Age = "Age"
23
+ }
24
+ export interface FooCursor {
25
+ nextPage?: string;
26
+ }
27
+ export interface FooSearchParameters extends IEntitySearchParameters<FooSorting, FooCursor> {
28
+ filters?: FooSearchFilters;
29
+ }
30
+ export interface FooFacets {
31
+ }
32
+ export declare class FooQueryBuilder implements IEntitiesQueryBuilder<FooEntity, FooSearchParameters, FooSorting, FooCursor, FooFacets> {
33
+ private readonly repository;
34
+ constructor(services: EntityServiceLocator<FooEntity, string>);
35
+ search(request: FooSearchParameters): Promise<EntitiesSearchResults<FooSearchParameters, FooEntity, FooSorting, FooCursor, FooFacets>>;
36
+ }
37
+ export interface FooDto {
38
+ id: string;
39
+ profile: {
40
+ name: string;
41
+ age: number;
42
+ };
43
+ updatedAt: Date;
44
+ }
45
+ export interface FooListItemDto {
46
+ id: string;
47
+ profile: {
48
+ name: string;
49
+ age: number;
50
+ };
51
+ }
52
+ export interface FooCreateData {
53
+ profile: {
54
+ name: string;
55
+ age: number;
56
+ };
57
+ }
58
+ export interface FooUpdateData {
59
+ profile: {
60
+ name: string;
61
+ age: number;
62
+ };
63
+ }
64
+ export declare class FooConverter implements IEntityConverter<FooEntity, FooDto, FooListItemDto, FooCreateData, FooUpdateData> {
65
+ toListItemDto(entity: FooEntity): FooListItemDto;
66
+ toEntityDto(entity: FooEntity): FooDto;
67
+ createDtoToEntity(input: FooCreateData): Partial<FooEntity>;
68
+ updateDtoToEntity(input: FooUpdateData): Partial<FooEntity>;
69
+ }
70
+ export declare const registerFooEntity: (container: IEntityManagerServiceRoot, options?: {
71
+ useConverter?: boolean;
72
+ }) => import("../../abstractions/configuration").IEntityManagerServiceCollection<FooEntity, string>;
@@ -0,0 +1,73 @@
1
+ import { DataSource, Repository } from "typeorm";
2
+ import { IEntitiesQueryBuilder, IEntityConverter, IEntityManagerServiceRoot, IEntitySearchParameters } from "../../../../abstractions";
3
+ import { TypeOrmRepository } from "../../../../integrations/repository/typeorm";
4
+ import { EntityServiceLocator } from "../../../../providers/services";
5
+ import { EntitiesSearchResults } from "../../../../models";
6
+ export declare class FooEntity {
7
+ id: string;
8
+ name: string;
9
+ age: number;
10
+ updatedAt: Date;
11
+ }
12
+ export declare class FooTypeOrmRepo extends TypeOrmRepository<FooEntity, string> {
13
+ constructor(repository: Repository<FooEntity>);
14
+ }
15
+ export interface FooSearchFilters {
16
+ minAge?: number;
17
+ maxAge?: number;
18
+ }
19
+ export declare enum FooSorting {
20
+ Name = "Name",
21
+ Age = "Age"
22
+ }
23
+ export interface FooCursor {
24
+ nextPage?: string;
25
+ }
26
+ export interface FooSearchParameters extends IEntitySearchParameters<FooSorting, FooCursor> {
27
+ filters?: FooSearchFilters;
28
+ }
29
+ export interface FooFacets {
30
+ }
31
+ export declare class FooQueryBuilder implements IEntitiesQueryBuilder<FooEntity, FooSearchParameters, FooSorting, FooCursor, FooFacets> {
32
+ private readonly services;
33
+ private readonly repository;
34
+ constructor(services: EntityServiceLocator<FooEntity, string>);
35
+ search(request: FooSearchParameters): Promise<EntitiesSearchResults<FooSearchParameters, FooEntity, FooSorting, FooCursor, FooFacets>>;
36
+ }
37
+ export interface FooDto {
38
+ id: string;
39
+ profile: {
40
+ name: string;
41
+ age: number;
42
+ };
43
+ updatedAt: Date;
44
+ }
45
+ export interface FooListItemDto {
46
+ id: string;
47
+ profile: {
48
+ name: string;
49
+ age: number;
50
+ };
51
+ }
52
+ export interface FooCreateInput {
53
+ profile: {
54
+ name: string;
55
+ age: number;
56
+ };
57
+ }
58
+ export interface FooUpdateInput {
59
+ id: string;
60
+ profile: {
61
+ name: string;
62
+ age: number;
63
+ };
64
+ }
65
+ export declare class FooConverter implements IEntityConverter<FooEntity, FooDto, FooListItemDto, FooCreateInput, FooUpdateInput> {
66
+ toListItemDto(entity: FooEntity): FooListItemDto;
67
+ toEntityDto(entity: FooEntity): FooDto;
68
+ createDtoToEntity(input: FooCreateInput): Partial<FooEntity>;
69
+ updateDtoToEntity(input: FooUpdateInput): Partial<FooEntity>;
70
+ }
71
+ export declare const registerFooTypeOrmEntity: (container: IEntityManagerServiceRoot, dataSource: DataSource, options?: {
72
+ useConverter?: boolean;
73
+ }) => import("../../../../abstractions").IEntityManagerServiceCollection<FooEntity, string>;
@@ -0,0 +1,7 @@
1
+ import { DataSource } from "typeorm";
2
+ export declare const mockPosrgresDatabase: ({ entities, }: {
3
+ entities: any[];
4
+ }) => Promise<{
5
+ db: import("pg-mem").IMemoryDb;
6
+ dataSource: DataSource;
7
+ }>;
@@ -0,0 +1,29 @@
1
+ import { EntitiesSearchResults } from "../models";
2
+ import { SortingType } from "./common";
3
+ import { IEntitySearchParameters } from "./searchParameters";
4
+ export interface IEntityCreateAction<TEntity, TEntityCreateInput, TEntityDto> {
5
+ execute(input: TEntityCreateInput): Promise<TEntityDto>;
6
+ }
7
+ export interface IEntityDeleteAction<TEntity, TEntityId> {
8
+ execute(id: TEntityId): Promise<void>;
9
+ }
10
+ export interface IEntityGetAction<TEntity, TEntityId, TEntityDto> {
11
+ execute(id: TEntityId): Promise<TEntityDto | undefined>;
12
+ }
13
+ export interface IEntityUpdateAction<TEntity, TEntityId, TEntityUpdateData, TEntityDto> {
14
+ execute(id: TEntityId, data: TEntityUpdateData): Promise<TEntityDto>;
15
+ }
16
+ export interface IEntityUpsertAction<TEntity, TEntityId, TEntityUpdateData, TEntityDto> {
17
+ execute(id: TEntityId, input: TEntityUpdateData): Promise<TEntityDto>;
18
+ }
19
+ export interface IEntitiesSearchAction<TEntity, TEntitySearchParameters extends IEntitySearchParameters<TSorting, TCursor>, TEntityListItemDto, TSorting extends SortingType, TCursor, TFacets> {
20
+ execute(request: TEntitySearchParameters): Promise<EntitiesSearchResults<TEntitySearchParameters, TEntityListItemDto, TSorting, TCursor, TFacets>>;
21
+ }
22
+ export interface IEntityActions<TEntity, TEntityId> {
23
+ get<TEntityDto>(): IEntityGetAction<TEntity, TEntityId, TEntityDto>;
24
+ search<TEntitySearchParameters extends IEntitySearchParameters<TSorting, TCursor>, TEntityListItemDto, TSorting extends SortingType, TCursor, TFacets>(): IEntitiesSearchAction<TEntity, TEntitySearchParameters, TEntityListItemDto, TSorting, TCursor, TFacets>;
25
+ create<TEntityCreateData, TEntityDto>(): IEntityCreateAction<TEntity, TEntityCreateData, TEntityDto>;
26
+ update<TEntityUpdateData, TEntityDto>(): IEntityUpdateAction<TEntity, TEntityId, TEntityUpdateData, TEntityDto>;
27
+ upsert<TEntityUpdateData, TEntityDto>(): IEntityUpsertAction<TEntity, TEntityId, TEntityUpdateData, TEntityDto>;
28
+ delete(): IEntityDeleteAction<TEntity, TEntityId>;
29
+ }
@@ -0,0 +1,9 @@
1
+ export interface IAuthorizationResult {
2
+ isAuthorized: boolean;
3
+ }
4
+ export interface IEntityAuthorizationMiddleware<TEntity> {
5
+ canRead(entity: Partial<TEntity>): Promise<IAuthorizationResult>;
6
+ canCreate(entity: Partial<TEntity>): Promise<IAuthorizationResult>;
7
+ canUpdate(entity: Partial<TEntity>): Promise<IAuthorizationResult>;
8
+ canDelete(entity: Partial<TEntity>): Promise<IAuthorizationResult>;
9
+ }
@@ -0,0 +1,12 @@
1
+ export interface IEntityCreateCommand<TEntity, TEntityCreateInput> {
2
+ execute(input: TEntityCreateInput): Promise<TEntity>;
3
+ }
4
+ export interface IEntityUpdateCommand<TEntity, TEntityId, TEntityUpdateData> {
5
+ execute(id: TEntityId, data: TEntityUpdateData): Promise<TEntity>;
6
+ }
7
+ export interface IEntityUpsertCommand<TEntity, TEntityId, TEntityUpdateData> {
8
+ execute(id: TEntityId, data: TEntityUpdateData): Promise<TEntity>;
9
+ }
10
+ export interface IEntityDeleteCommand<TEntity, TEntityId> {
11
+ execute(id: TEntityId): Promise<void>;
12
+ }
@@ -0,0 +1,11 @@
1
+ export type EnumType = string | number | symbol;
2
+ export type SortingType = EnumType;
3
+ export interface ClassType {
4
+ new (...args: any[]): any;
5
+ constructor: {
6
+ name: string;
7
+ };
8
+ }
9
+ export interface Type<T = any> extends Function {
10
+ new (...args: any[]): T;
11
+ }
@@ -0,0 +1,34 @@
1
+ import { EntityServiceLocator } from "../providers/services";
2
+ import { IEntityAuthorizationMiddleware } from "./authorization";
3
+ import { SortingType } from "./common";
4
+ import { ConnectorOptions, IEntityConnector } from "./connectors";
5
+ import { IEntityConverter } from "./converters";
6
+ import { IEntityMapper } from "./mappers";
7
+ import { IEntitiesQueryBuilder } from "./queries";
8
+ import { ReplicaOptions } from "./replication";
9
+ import { IEntityRepository } from "./repository";
10
+ import { IEntitySearchParameters } from "./searchParameters";
11
+ export interface IEntityManagerServiceRoot {
12
+ registerEntity<TEntity, TEntityId, TRepository extends IEntityRepository<TEntity, TEntityId, unknown, unknown, unknown, unknown>>(entityName: string, repository: TRepository): IEntityManagerServiceCollection<TEntity, TEntityId>;
13
+ }
14
+ export interface IEntityManagerServiceCollection<TEntity, TEntityId> {
15
+ getServiceLocator(): EntityServiceLocator<TEntity, TEntityId>;
16
+ mapCrudOperations<TEntitySearchParameters extends IEntitySearchParameters<TSorting, TCursor>, TSorting extends SortingType, TCursor, TFacets, TEntitiesQueryBuilder extends IEntitiesQueryBuilder<TEntity, TEntitySearchParameters, TSorting, TCursor, TFacets>>({ queryBuilder, }: {
17
+ queryBuilder: TEntitiesQueryBuilder;
18
+ }): IEntityManagerServiceCollection<TEntity, TEntityId>;
19
+ addConverter<TEntityDto, TListItemDto, TEntityCreateInput, TEntityUpdateInput, TEntityConverter extends IEntityConverter<TEntity, TEntityDto, TListItemDto, TEntityCreateInput, TEntityUpdateInput>>(converter: TEntityConverter): IEntityManagerServiceCollection<TEntity, TEntityId>;
20
+ addAuthorization<TEntityAuthorizationMiddleware extends IEntityAuthorizationMiddleware<TEntity>>({ middleware, }: {
21
+ middleware: TEntityAuthorizationMiddleware;
22
+ }): IEntityManagerServiceCollection<TEntity, TEntityId>;
23
+ withReplica<TRepository extends IEntityRepository<TEntity, TEntityId, unknown, unknown, unknown, unknown>>({ name, options, repository, }: {
24
+ name: string;
25
+ options: ReplicaOptions;
26
+ repository: TRepository;
27
+ }): IEntityManagerServiceCollection<TEntity, TEntityId>;
28
+ withSynchronization<TMappedType, TMapper extends IEntityMapper<TEntity, TMappedType>, TEntityConnector extends IEntityConnector<TEntity, TMappedType>>({ name, options, connector, mapper, }: {
29
+ name: string;
30
+ options: ConnectorOptions;
31
+ connector: TEntityConnector;
32
+ mapper: TMapper;
33
+ }): IEntityManagerServiceCollection<TEntity, TEntityId>;
34
+ }
@@ -0,0 +1,30 @@
1
+ import { IEntityMapper } from "./mappers";
2
+ export interface IEntityConnector<TEntity, TMappedType> {
3
+ syncEntity(entity: TMappedType): Promise<void>;
4
+ deleteEntity<TEntityId>(id: TEntityId): Promise<void>;
5
+ }
6
+ export interface IConnectorsConfiguration<TEntity> {
7
+ configureConnector<TEntityConnector extends IEntityConnector<TEntity, TMappedType>, TMappedType, TMapper extends IEntityMapper<TEntity, TMappedType>>(name: string, options: ConnectorOptions, connector: TEntityConnector, mapper: TMapper): void;
8
+ getConnector(name: string): ConnectorConfiguration<TEntity>;
9
+ getConnectors(): ConnectorConfiguration<TEntity>[];
10
+ }
11
+ export declare enum ConnectorMode {
12
+ Sync = 0,
13
+ Async = 1
14
+ }
15
+ export type ConnectorOptions = {
16
+ mode: ConnectorMode;
17
+ enabled?: boolean;
18
+ };
19
+ export type ConnectorConfiguration<TEntity> = {
20
+ name: string;
21
+ options: ConnectorOptions;
22
+ connector: IEntityConnector<TEntity, unknown>;
23
+ mapper: IEntityMapper<TEntity, unknown>;
24
+ };
25
+ export interface IEntityConnectorSyncManager<TEntity> {
26
+ syncEntity(entity: TEntity): Promise<void>;
27
+ }
28
+ export interface IEntityConnectorDeleteManager<TEntity, TEntityId> {
29
+ deleteEntity(entityId: TEntityId): Promise<void>;
30
+ }
@@ -0,0 +1,24 @@
1
+ export interface IEntitiesSearchConverter<TEntity, TListItemDto> {
2
+ toListItemDto(entity: TEntity): TListItemDto;
3
+ }
4
+ export interface IEntityCreateCommandConverter<TEntity, TEntityCreateInput> {
5
+ createDtoToEntity(input: TEntityCreateInput): Partial<TEntity>;
6
+ }
7
+ export interface IEntityCreateActionConverter<TEntity, TEntityDto> {
8
+ toEntityDto(entity: TEntity): TEntityDto;
9
+ }
10
+ export interface IEntityCreateConverter<TEntity, TEntityCreateInput, TEntityDto> extends IEntityCreateCommandConverter<TEntity, TEntityCreateInput>, IEntityCreateActionConverter<TEntity, TEntityDto> {
11
+ }
12
+ export interface IEntityGetConverter<TEntity, TEntityDto> {
13
+ toEntityDto(entity: TEntity): TEntityDto;
14
+ }
15
+ export interface IEntityUpdateCommandConverter<TEntity, TEntityUpdateInput> {
16
+ updateDtoToEntity(input: TEntityUpdateInput): Partial<TEntity>;
17
+ }
18
+ export interface IEntityUpdateActionConverter<TEntity, TEntityDto> {
19
+ toEntityDto(entity: TEntity): TEntityDto;
20
+ }
21
+ export interface IEntityUpdateConverter<TEntity, TEntityUpdateInput, TEntityDto> extends IEntityUpdateCommandConverter<TEntity, TEntityUpdateInput>, IEntityUpdateActionConverter<TEntity, TEntityDto> {
22
+ }
23
+ export interface IEntityConverter<TEntity, TEntityDto = TEntity, TListItemDto = TEntity, TEntityCreateInput = TEntity, TEntityUpdateInput = TEntity> extends IEntitiesSearchConverter<TEntity, TListItemDto>, IEntityCreateCommandConverter<TEntity, TEntityCreateInput>, IEntityCreateActionConverter<TEntity, TEntityDto>, IEntityCreateConverter<TEntity, TEntityCreateInput, TEntityDto>, IEntityGetConverter<TEntity, TEntityDto>, IEntityUpdateCommandConverter<TEntity, TEntityUpdateInput>, IEntityUpdateActionConverter<TEntity, TEntityDto> {
24
+ }
@@ -0,0 +1,24 @@
1
+ export declare class EntityManagerException extends Error {
2
+ constructor(message: string);
3
+ }
4
+ export declare enum EntityOperationType {
5
+ Create = 0,
6
+ Update = 1,
7
+ Delete = 2,
8
+ Read = 3
9
+ }
10
+ export declare class EntityOperationUnauthorizedException<TEntity> extends EntityManagerException {
11
+ private readonly entity;
12
+ private readonly operation;
13
+ constructor(operationType: EntityOperationType, entity: Partial<TEntity>, entityName: string);
14
+ get getEntity(): Partial<TEntity>;
15
+ get getOperation(): EntityOperationType;
16
+ }
17
+ export declare class EntityNotFoundException<TEntityId> extends EntityManagerException {
18
+ private readonly entityId;
19
+ constructor(id?: TEntityId);
20
+ getEntityId(): TEntityId | undefined;
21
+ }
22
+ export declare class MultipleEntitiesFoundException extends EntityManagerException {
23
+ constructor();
24
+ }
@@ -0,0 +1,5 @@
1
+ export interface IEntityEventsManager<TEntity, TEntityId> {
2
+ processEntityCreatedEvent(entity: TEntity): Promise<void>;
3
+ processEntityUpdatedEvent(entity: TEntity): Promise<void>;
4
+ processEntityDeletedEvent(id: TEntityId): Promise<void>;
5
+ }
@@ -0,0 +1 @@
1
+ export type FilterExpression<TEntity> = (entity: TEntity) => boolean;
@@ -0,0 +1,15 @@
1
+ export { IEntityCreateAction, IEntityDeleteAction, IEntityGetAction, IEntityUpdateAction, IEntityUpsertAction, IEntitiesSearchAction, IEntityActions, } from "./actions";
2
+ export * from "./authorization";
3
+ export { IEntityCreateCommand, IEntityUpdateCommand, IEntityUpsertCommand, IEntityDeleteCommand, } from "./commands";
4
+ export { IEntityManagerServiceRoot, IEntityManagerServiceCollection, } from "./configuration";
5
+ export { IEntitiesSearchConverter, IEntityCreateCommandConverter, IEntityCreateActionConverter, IEntityCreateConverter, IEntityGetConverter, IEntityUpdateCommandConverter, IEntityUpdateActionConverter, IEntityUpdateConverter, IEntityConverter, } from "./converters";
6
+ export * from "./errors";
7
+ export { IEntityEventsManager } from "./events";
8
+ export * from "./filters";
9
+ export { IEntityManager } from "./manager";
10
+ export { IEntityMapper } from "./mappers";
11
+ export { IEntitiesSearchQuery, IEntityGetQuery, IEntitiesQueryBuilder, } from "./queries";
12
+ export { IReplicasConfiguration, ReplicationMode, ReplicaOptions, ReplicaConfiguration, IEntityReplicaDeleteManager, IEntityReplicaSyncManager, } from "./replication";
13
+ export { IEntityRepository } from "./repository";
14
+ export * from "./searchParameters";
15
+ export { IEntitySearchResults, ISearchResultsPaging } from "./searchResults";
@@ -0,0 +1,12 @@
1
+ import { ClassType, Type } from "./common";
2
+ export interface IResolveServiceOptions {
3
+ optional?: boolean;
4
+ }
5
+ export interface IServiceLocator {
6
+ register<T extends ClassType>(name: string, service: Type<T>): void;
7
+ registerEntityService<T>(serviceName: string, entityName: string, service: T): void;
8
+ registerEntityServiceType<T>(serviceType: Type<T>, entityName: string, service: T): void;
9
+ resolve<T extends ClassType>(name: string, options?: IResolveServiceOptions): T;
10
+ resolveEntityService<T>(serviceName: string, entityName: string, options?: IResolveServiceOptions): T;
11
+ resolveEntityServiceType<T>(serviceType: Type<T>, entityName: string, options?: IResolveServiceOptions): T;
12
+ }
@@ -0,0 +1,12 @@
1
+ import { IEntityCreateCommand, IEntityDeleteCommand, IEntityUpdateCommand, IEntityUpsertCommand } from "./commands";
2
+ import { SortingType } from "./common";
3
+ import { IEntitiesSearchQuery, IEntityGetQuery } from "./queries";
4
+ import { IEntitySearchParameters } from "./searchParameters";
5
+ export interface IEntityManager<TEntity, TEntityId> {
6
+ get(): IEntityGetQuery<TEntity, TEntityId>;
7
+ search<TEntitySearchParameters extends IEntitySearchParameters<TSorting, TCursor>, TSorting extends SortingType, TCursor, TFacets>(): IEntitiesSearchQuery<TEntity, TEntitySearchParameters, TSorting, TCursor, TFacets>;
8
+ create<TEntityCreateInput>(): IEntityCreateCommand<TEntity, TEntityCreateInput>;
9
+ update<TEntityUpdateData>(): IEntityUpdateCommand<TEntity, TEntityId, TEntityUpdateData>;
10
+ upsert<TEntityUpdateData>(): IEntityUpsertCommand<TEntity, TEntityId, TEntityUpdateData>;
11
+ delete(): IEntityDeleteCommand<TEntity, TEntityId>;
12
+ }
@@ -0,0 +1,3 @@
1
+ export interface IEntityMapper<TEntity, TMappedEntity> {
2
+ mapEntity(entity: TEntity): Promise<TMappedEntity>;
3
+ }
@@ -0,0 +1,12 @@
1
+ import { EntitiesSearchResults } from "../models";
2
+ import { SortingType } from "./common";
3
+ import { IEntitySearchParameters } from "./searchParameters";
4
+ export interface IEntitiesSearchQuery<TEntity, TEntitySearchParameters extends IEntitySearchParameters<TSorting, TCursor>, TSorting extends SortingType, TCursor, TFacets> {
5
+ execute(request: TEntitySearchParameters): Promise<EntitiesSearchResults<TEntitySearchParameters, TEntity, TSorting, TCursor, TFacets>>;
6
+ }
7
+ export interface IEntityGetQuery<TEntity, TEntityId> {
8
+ execute(id: TEntityId): Promise<TEntity | undefined>;
9
+ }
10
+ export interface IEntitiesQueryBuilder<TEntity, TEntitySearchParameters extends IEntitySearchParameters<TSorting, TCursor>, TSorting extends SortingType, TCursor, TFacets> {
11
+ search(request: TEntitySearchParameters): Promise<EntitiesSearchResults<TEntitySearchParameters, TEntity, TSorting, TCursor, TFacets>>;
12
+ }
@@ -0,0 +1,25 @@
1
+ import { IEntityRepository } from "./repository";
2
+ export interface IReplicasConfiguration<TEntity, TEntityId> {
3
+ configureReplica<TRepository extends IEntityRepository<TEntity, TEntityId, unknown, unknown, unknown, unknown>>(name: string, options: ReplicaOptions, repository: TRepository): void;
4
+ getReplica(name: string): ReplicaConfiguration<TEntity, TEntityId>;
5
+ getReplicas(): ReplicaConfiguration<TEntity, TEntityId>[];
6
+ }
7
+ export declare enum ReplicationMode {
8
+ Sync = 0,
9
+ Async = 1
10
+ }
11
+ export type ReplicaOptions = {
12
+ mode: ReplicationMode;
13
+ enabled?: boolean;
14
+ };
15
+ export type ReplicaConfiguration<TEntity, TEntityId> = {
16
+ name: string;
17
+ options: ReplicaOptions;
18
+ repository: IEntityRepository<TEntity, TEntityId, unknown, unknown, unknown, unknown>;
19
+ };
20
+ export interface IEntityReplicaDeleteManager<TEntity, TEntityId> {
21
+ deleteReplicas(entityId: TEntityId): Promise<void>;
22
+ }
23
+ export interface IEntityReplicaSyncManager<TEntity> {
24
+ syncReplicas(entity: TEntity): Promise<void>;
25
+ }
@@ -0,0 +1,15 @@
1
+ export interface IEntityRepository<TEntity, TEntityId, TGetConditions, TFindCondition, TUpdateCondition, TDeleteCondition> {
2
+ exists(id: TEntityId): Promise<boolean>;
3
+ existsBy(condition: TGetConditions): Promise<boolean>;
4
+ get(id: TEntityId): Promise<TEntity | undefined>;
5
+ getBy(condition: TGetConditions): Promise<TEntity | undefined>;
6
+ all(): Promise<TEntity[]>;
7
+ find(condition: TFindCondition): Promise<TEntity[]>;
8
+ findById(id: TEntityId[]): Promise<TEntity[]>;
9
+ delete(id: TEntityId): Promise<void>;
10
+ deleteBy(condition: TDeleteCondition): Promise<void>;
11
+ create(entity: Partial<TEntity>): Promise<TEntity>;
12
+ update(id: TEntityId, entity: Partial<TEntity>): Promise<TEntity>;
13
+ updateBy(entity: Partial<TEntity>, condition: TUpdateCondition): Promise<TEntity[]>;
14
+ upsert(id: TEntityId, entity: Partial<TEntity>): Promise<TEntity>;
15
+ }
@@ -0,0 +1,26 @@
1
+ export interface IEntitySearchParameters<TSorting, TCursor> {
2
+ filters?: ISearchFilters;
3
+ sorting?: ISearchSorting<TSorting>;
4
+ paging?: ISearchRequestPaging<TCursor>;
5
+ options?: ISearchOptions;
6
+ }
7
+ export interface ISearchFilters {
8
+ }
9
+ export interface ISearchOptions {
10
+ includeFacets?: boolean;
11
+ }
12
+ export interface ISearchRequestPaging<TCursor> {
13
+ cursor: TCursor;
14
+ pageSize: number;
15
+ }
16
+ export interface ISearchSortingField<TSorting> {
17
+ field: TSorting;
18
+ direction: SortDirection;
19
+ }
20
+ export interface ISearchSorting<TSorting> {
21
+ fields: ISearchSortingField<TSorting>[];
22
+ }
23
+ export declare enum SortDirection {
24
+ Asc = 0,
25
+ Desc = 1
26
+ }
@@ -0,0 +1,16 @@
1
+ import { SortingType } from "./common";
2
+ import { IEntitySearchParameters } from "./searchParameters";
3
+ export interface IEntitySearchResults<TSearchParameters extends IEntitySearchParameters<TSorting, TCursor>, TResult, TSorting extends SortingType, TCursor, TFacets> {
4
+ request: TSearchParameters;
5
+ items: TResult[];
6
+ Facets?: TFacets;
7
+ paging?: ISearchResultsPaging<TCursor>;
8
+ }
9
+ export interface ISearchResultsPaging<TCursor> {
10
+ pageIndex: number;
11
+ pageSize: number;
12
+ totPages: number;
13
+ nextPageCursor?: TCursor;
14
+ currentPageCursor?: TCursor;
15
+ prevPageCursor?: TCursor;
16
+ }
@@ -0,0 +1,8 @@
1
+ import { IEntityCreateAction } from "../abstractions/actions";
2
+ import { EntityServiceLocator } from "../providers/services";
3
+ export declare class EntityCreateAction<TEntity, TEntityId, TEntityCreateInput, TEntityDto> implements IEntityCreateAction<TEntity, TEntityCreateInput, TEntityDto> {
4
+ private readonly services;
5
+ private readonly logger;
6
+ constructor(services: EntityServiceLocator<TEntity, TEntityId>);
7
+ execute(input: TEntityCreateInput): Promise<TEntityDto>;
8
+ }
@@ -0,0 +1,7 @@
1
+ import { IEntityDeleteAction } from "../abstractions/actions";
2
+ import { EntityServiceLocator } from "../providers/services";
3
+ export declare class EntityDeleteAction<TEntity, TEntityId> implements IEntityDeleteAction<TEntity, TEntityId> {
4
+ private readonly services;
5
+ constructor(services: EntityServiceLocator<TEntity, TEntityId>);
6
+ execute(id: TEntityId): Promise<void>;
7
+ }
@@ -0,0 +1,7 @@
1
+ import { IEntityGetAction } from "../abstractions/actions";
2
+ import { EntityServiceLocator } from "../providers/services";
3
+ export declare class EntityGetAction<TEntity, TEntityId, TEntityDto> implements IEntityGetAction<TEntity, TEntityId, TEntityDto> {
4
+ private readonly services;
5
+ constructor(services: EntityServiceLocator<TEntity, TEntityId>);
6
+ execute(id: TEntityId): Promise<TEntityDto | undefined>;
7
+ }
@@ -0,0 +1,10 @@
1
+ import { IEntitiesSearchAction } from "../abstractions/actions";
2
+ import { SortingType } from "../abstractions/common";
3
+ import { IEntitySearchParameters } from "../abstractions/searchParameters";
4
+ import { EntitiesSearchResults } from "../models";
5
+ import { EntityServiceLocator } from "../providers/services";
6
+ export declare class EntitiesSearchAction<TEntity, TEntityId, TEntitySearchParameters extends IEntitySearchParameters<TSorting, TCursor>, TListItemDto, TSorting extends SortingType, TCursor, TFacets> implements IEntitiesSearchAction<TEntity, TEntitySearchParameters, TListItemDto, TSorting, TCursor, TFacets> {
7
+ private readonly services;
8
+ constructor(services: EntityServiceLocator<TEntity, TEntityId>);
9
+ execute(request: TEntitySearchParameters): Promise<EntitiesSearchResults<TEntitySearchParameters, TListItemDto, TSorting, TCursor, TFacets>>;
10
+ }
@@ -0,0 +1,7 @@
1
+ import { IEntityUpdateAction } from "../abstractions/actions";
2
+ import { EntityServiceLocator } from "../providers/services";
3
+ export declare class EntityUpdateAction<TEntity, TEntityId, TEntityUpdateData, TEntityDto> implements IEntityUpdateAction<TEntity, TEntityId, TEntityUpdateData, TEntityDto> {
4
+ private readonly services;
5
+ constructor(services: EntityServiceLocator<TEntity, TEntityId>);
6
+ execute(id: TEntityId, input: TEntityUpdateData): Promise<TEntityDto>;
7
+ }
@@ -0,0 +1,7 @@
1
+ import { IEntityUpsertAction } from "../abstractions/actions";
2
+ import { EntityServiceLocator } from "../providers/services";
3
+ export declare class EntityUpsertAction<TEntity, TEntityId, TEntityUpdateInput, TEntityDto> implements IEntityUpsertAction<TEntity, TEntityId, TEntityUpdateInput, TEntityDto> {
4
+ private readonly services;
5
+ constructor(services: EntityServiceLocator<TEntity, TEntityId>);
6
+ execute(id: TEntityId, input: TEntityUpdateInput): Promise<TEntityDto>;
7
+ }
@@ -0,0 +1,13 @@
1
+ import { IAuthorizationResult, IEntityAuthorizationMiddleware } from "../abstractions/authorization";
2
+ export declare class AllowAllAuthorizationMiddleware<TEntity> implements IEntityAuthorizationMiddleware<TEntity> {
3
+ canRead(entity: TEntity): Promise<IAuthorizationResult>;
4
+ canCreate(entity: TEntity): Promise<{
5
+ isAuthorized: boolean;
6
+ }>;
7
+ canUpdate(entity: TEntity): Promise<{
8
+ isAuthorized: boolean;
9
+ }>;
10
+ canDelete(entity: TEntity): Promise<{
11
+ isAuthorized: boolean;
12
+ }>;
13
+ }
@@ -0,0 +1,9 @@
1
+ import { IEntityCreateCommand } from "../abstractions/commands";
2
+ import { EntityServiceLocator } from "../providers/services";
3
+ export declare class EntityCreateCommand<TEntity, TEntityId, TEntityCreateInput> implements IEntityCreateCommand<TEntity, TEntityCreateInput> {
4
+ private readonly services;
5
+ constructor(services: EntityServiceLocator<TEntity, TEntityId>);
6
+ execute(input: TEntityCreateInput): Promise<TEntity>;
7
+ private adaptEntity;
8
+ private authorize;
9
+ }
@@ -0,0 +1,8 @@
1
+ import { IEntityDeleteCommand } from "../abstractions/commands";
2
+ import { EntityServiceLocator } from "../providers/services";
3
+ export declare class EntityDeleteCommand<TEntity, TEntityId> implements IEntityDeleteCommand<TEntity, TEntityId> {
4
+ private readonly services;
5
+ constructor(services: EntityServiceLocator<TEntity, TEntityId>);
6
+ execute(id: TEntityId): Promise<void>;
7
+ private authorize;
8
+ }
@@ -0,0 +1,9 @@
1
+ import { IEntityUpdateCommand } from "../abstractions/commands";
2
+ import { EntityServiceLocator } from "../providers/services";
3
+ export declare class EntityUpdateCommand<TEntity, TEntityId, TEntityUpdateInput> implements IEntityUpdateCommand<TEntity, TEntityId, TEntityUpdateInput> {
4
+ private readonly services;
5
+ constructor(services: EntityServiceLocator<TEntity, TEntityId>);
6
+ execute(id: TEntityId, input: TEntityUpdateInput): Promise<TEntity>;
7
+ private adaptEntity;
8
+ private authorize;
9
+ }
@@ -0,0 +1,10 @@
1
+ import { IEntityUpsertCommand } from "../abstractions/commands";
2
+ import { EntityServiceLocator } from "../providers/services";
3
+ export declare class EntityUpsertCommand<TEntity, TEntityId, TEntityUpdateData> implements IEntityUpsertCommand<TEntity, TEntityId, TEntityUpdateData> {
4
+ private readonly services;
5
+ constructor(services: EntityServiceLocator<TEntity, TEntityId>);
6
+ execute(id: TEntityId, data: TEntityUpdateData): Promise<TEntity>;
7
+ private upsertEntity;
8
+ private adaptEntity;
9
+ private authorize;
10
+ }