@ptc-org/nestjs-query-mikro-orm 9.4.0

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.
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "@ptc-org/nestjs-query-mikro-orm",
3
+ "version": "9.4.0",
4
+ "description": "MikroORM adapter for @ptc-org/nestjs-query-core",
5
+ "homepage": "https://github.com/fullstackhouse/nestjs-query#readme",
6
+ "bugs": {
7
+ "url": "https://github.com/fullstackhouse/nestjs-query/issues"
8
+ },
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git+https://github.com/fullstackhouse/nestjs-query.git",
12
+ "directory": "packages/query-mikro-orm"
13
+ },
14
+ "license": "MIT",
15
+ "main": "src/index.js",
16
+ "types": "src/index.d.ts",
17
+ "directories": {
18
+ "lib": "src",
19
+ "test": "__tests__"
20
+ },
21
+ "files": [
22
+ "src/**"
23
+ ],
24
+ "dependencies": {
25
+ "@mikro-orm/sqlite": "6.6.1",
26
+ "lodash.merge": "4.6.2",
27
+ "reflect-metadata": "^0.2.2",
28
+ "tslib": "^2.8.1"
29
+ },
30
+ "peerDependencies": {
31
+ "@mikro-orm/core": "^6.0.0",
32
+ "@mikro-orm/nestjs": "^6.0.0",
33
+ "@nestjs/common": "^9.0.0 || ^10.0.0 || ^11.0.0",
34
+ "@ptc-org/nestjs-query-core": "^9.0.0"
35
+ },
36
+ "publishConfig": {
37
+ "access": "public"
38
+ },
39
+ "packageManager": "yarn@4.4.0",
40
+ "type": "commonjs"
41
+ }
@@ -0,0 +1 @@
1
+ export { MikroOrmAssembler } from './mikro-orm.assembler';
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MikroOrmAssembler = void 0;
4
+ var mikro_orm_assembler_1 = require("./mikro-orm.assembler");
5
+ Object.defineProperty(exports, "MikroOrmAssembler", { enumerable: true, get: function () { return mikro_orm_assembler_1.MikroOrmAssembler; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/query-mikro-orm/src/assemblers/index.ts"],"names":[],"mappings":";;;AAAA,6DAAyD;AAAhD,wHAAA,iBAAiB,OAAA"}
@@ -0,0 +1,10 @@
1
+ import { AbstractAssembler, AggregateQuery, AggregateResponse, DeepPartial, Query } from '@ptc-org/nestjs-query-core';
2
+ export declare class MikroOrmAssembler<DTO, Entity, C = DeepPartial<DTO>, CE = DeepPartial<Entity>, U = C, UE = CE> extends AbstractAssembler<DTO, Entity, C, CE, U, UE> {
3
+ convertToDTO(entity: Entity): DTO | Promise<DTO>;
4
+ convertToEntity(dto: DTO): Entity;
5
+ convertQuery(query: Query<DTO>): Query<Entity>;
6
+ convertAggregateQuery(aggregate: AggregateQuery<DTO>): AggregateQuery<Entity>;
7
+ convertAggregateResponse(aggregate: AggregateResponse<Entity>): AggregateResponse<DTO>;
8
+ convertToCreateEntity(create: C): CE;
9
+ convertToUpdateEntity(update: U): UE;
10
+ }
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MikroOrmAssembler = void 0;
4
+ const nestjs_query_core_1 = require("@ptc-org/nestjs-query-core");
5
+ class MikroOrmAssembler extends nestjs_query_core_1.AbstractAssembler {
6
+ convertToDTO(entity) {
7
+ return entity;
8
+ }
9
+ convertToEntity(dto) {
10
+ return dto;
11
+ }
12
+ convertQuery(query) {
13
+ return query;
14
+ }
15
+ convertAggregateQuery(aggregate) {
16
+ return aggregate;
17
+ }
18
+ convertAggregateResponse(aggregate) {
19
+ return aggregate;
20
+ }
21
+ convertToCreateEntity(create) {
22
+ return create;
23
+ }
24
+ convertToUpdateEntity(update) {
25
+ return update;
26
+ }
27
+ }
28
+ exports.MikroOrmAssembler = MikroOrmAssembler;
29
+ //# sourceMappingURL=mikro-orm.assembler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mikro-orm.assembler.js","sourceRoot":"","sources":["../../../../../packages/query-mikro-orm/src/assemblers/mikro-orm.assembler.ts"],"names":[],"mappings":";;;AAAA,kEAAqH;AAErH,MAAa,iBAOX,SAAQ,qCAA4C;IACpD,YAAY,CAAC,MAAc;QACzB,OAAO,MAAwB,CAAA;IACjC,CAAC;IAED,eAAe,CAAC,GAAQ;QACtB,OAAO,GAAwB,CAAA;IACjC,CAAC;IAED,YAAY,CAAC,KAAiB;QAC5B,OAAO,KAAiC,CAAA;IAC1C,CAAC;IAED,qBAAqB,CAAC,SAA8B;QAClD,OAAO,SAA8C,CAAA;IACvD,CAAC;IAED,wBAAwB,CAAC,SAAoC;QAC3D,OAAO,SAA8C,CAAA;IACvD,CAAC;IAED,qBAAqB,CAAC,MAAS;QAC7B,OAAO,MAAuB,CAAA;IAChC,CAAC;IAED,qBAAqB,CAAC,MAAS;QAC7B,OAAO,MAAuB,CAAA;IAChC,CAAC;CACF;AAnCD,8CAmCC"}
package/src/index.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ export { MikroOrmAssembler } from './assemblers';
2
+ export { NestjsQueryMikroOrmModule } from './module';
3
+ export { createMikroOrmQueryServiceProviders, EntityServiceOptions } from './providers';
4
+ export { MikroOrmQueryService } from './services';
package/src/index.js ADDED
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MikroOrmQueryService = exports.createMikroOrmQueryServiceProviders = exports.NestjsQueryMikroOrmModule = exports.MikroOrmAssembler = void 0;
4
+ var assemblers_1 = require("./assemblers");
5
+ Object.defineProperty(exports, "MikroOrmAssembler", { enumerable: true, get: function () { return assemblers_1.MikroOrmAssembler; } });
6
+ var module_1 = require("./module");
7
+ Object.defineProperty(exports, "NestjsQueryMikroOrmModule", { enumerable: true, get: function () { return module_1.NestjsQueryMikroOrmModule; } });
8
+ var providers_1 = require("./providers");
9
+ Object.defineProperty(exports, "createMikroOrmQueryServiceProviders", { enumerable: true, get: function () { return providers_1.createMikroOrmQueryServiceProviders; } });
10
+ var services_1 = require("./services");
11
+ Object.defineProperty(exports, "MikroOrmQueryService", { enumerable: true, get: function () { return services_1.MikroOrmQueryService; } });
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/query-mikro-orm/src/index.ts"],"names":[],"mappings":";;;AAAA,2CAAgD;AAAvC,+GAAA,iBAAiB,OAAA;AAC1B,mCAAoD;AAA3C,mHAAA,yBAAyB,OAAA;AAClC,yCAAuF;AAA9E,gIAAA,mCAAmC,OAAA;AAC5C,uCAAiD;AAAxC,gHAAA,oBAAoB,OAAA"}
@@ -0,0 +1,6 @@
1
+ import { DynamicModule } from '@nestjs/common';
2
+ import { Class } from '@ptc-org/nestjs-query-core';
3
+ import { EntityServiceOptions } from './providers';
4
+ export declare class NestjsQueryMikroOrmModule {
5
+ static forFeature(entities: Array<Class<object> | EntityServiceOptions>, dataSource?: string): DynamicModule;
6
+ }
package/src/module.js ADDED
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NestjsQueryMikroOrmModule = void 0;
4
+ const nestjs_1 = require("@mikro-orm/nestjs");
5
+ const providers_1 = require("./providers");
6
+ class NestjsQueryMikroOrmModule {
7
+ static forFeature(entities, dataSource) {
8
+ const queryServiceProviders = (0, providers_1.createMikroOrmQueryServiceProviders)(entities, dataSource);
9
+ const entityClasses = entities.map((e) => (typeof e === 'object' && 'entity' in e ? e.entity : e));
10
+ const mikroOrmModule = nestjs_1.MikroOrmModule.forFeature(entityClasses, dataSource);
11
+ return {
12
+ imports: [mikroOrmModule],
13
+ module: NestjsQueryMikroOrmModule,
14
+ providers: queryServiceProviders,
15
+ exports: [...queryServiceProviders, mikroOrmModule]
16
+ };
17
+ }
18
+ }
19
+ exports.NestjsQueryMikroOrmModule = NestjsQueryMikroOrmModule;
20
+ //# sourceMappingURL=module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../../../../packages/query-mikro-orm/src/module.ts"],"names":[],"mappings":";;;AAAA,8CAAkD;AAIlD,2CAAuF;AAEvF,MAAa,yBAAyB;IACpC,MAAM,CAAC,UAAU,CAAC,QAAqD,EAAE,UAAmB;QAC1F,MAAM,qBAAqB,GAAG,IAAA,+CAAmC,EAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;QACvF,MAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAClG,MAAM,cAAc,GAAG,uBAAc,CAAC,UAAU,CAAC,aAAa,EAAE,UAAU,CAAC,CAAA;QAE3E,OAAO;YACL,OAAO,EAAE,CAAC,cAAc,CAAC;YACzB,MAAM,EAAE,yBAAyB;YACjC,SAAS,EAAE,qBAAqB;YAChC,OAAO,EAAE,CAAC,GAAG,qBAAqB,EAAE,cAAc,CAAC;SACpD,CAAA;IACH,CAAC;CACF;AAbD,8DAaC"}
@@ -0,0 +1,8 @@
1
+ import { FactoryProvider } from '@nestjs/common';
2
+ import { Assembler, Class } from '@ptc-org/nestjs-query-core';
3
+ export interface EntityServiceOptions<DTO extends object = object, Entity extends object = object> {
4
+ entity: Class<Entity>;
5
+ dto?: Class<DTO>;
6
+ assembler?: Class<Assembler<DTO, Entity>>;
7
+ }
8
+ export declare function createMikroOrmQueryServiceProviders(options: Array<Class<object> | EntityServiceOptions>, dataSource?: string): FactoryProvider[];
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createMikroOrmQueryServiceProviders = createMikroOrmQueryServiceProviders;
4
+ const nestjs_1 = require("@mikro-orm/nestjs");
5
+ const nestjs_query_core_1 = require("@ptc-org/nestjs-query-core");
6
+ const services_1 = require("./services");
7
+ function createMikroOrmQueryServiceProvider(EntityClass, DTOClass, AssemblerClass, dataSource) {
8
+ return {
9
+ provide: (0, nestjs_query_core_1.getQueryServiceToken)(DTOClass ?? EntityClass),
10
+ useFactory(repo) {
11
+ if (AssemblerClass) {
12
+ const assembler = new AssemblerClass();
13
+ return new services_1.MikroOrmQueryService(repo, assembler);
14
+ }
15
+ if (DTOClass) {
16
+ const assembler = nestjs_query_core_1.AssemblerFactory.getAssembler(DTOClass, EntityClass);
17
+ if (assembler) {
18
+ return new services_1.MikroOrmQueryService(repo, assembler);
19
+ }
20
+ }
21
+ return new services_1.MikroOrmQueryService(repo);
22
+ },
23
+ inject: [(0, nestjs_1.getRepositoryToken)(EntityClass, dataSource)]
24
+ };
25
+ }
26
+ function createMikroOrmQueryServiceProviders(options, dataSource) {
27
+ return options.map((option) => {
28
+ if (typeof option === 'object' && 'entity' in option) {
29
+ return createMikroOrmQueryServiceProvider(option.entity, option.dto, option.assembler, dataSource);
30
+ }
31
+ return createMikroOrmQueryServiceProvider(option, undefined, undefined, dataSource);
32
+ });
33
+ }
34
+ //# sourceMappingURL=providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../../../packages/query-mikro-orm/src/providers.ts"],"names":[],"mappings":";;AAwCA,kFAUC;AAjDD,8CAAsD;AAEtD,kEAAqG;AAErG,yCAAiD;AAQjD,SAAS,kCAAkC,CACzC,WAA0B,EAC1B,QAAqB,EACrB,cAA8C,EAC9C,UAAmB;IAEnB,OAAO;QACL,OAAO,EAAE,IAAA,wCAAoB,EAAC,QAAQ,IAAI,WAAW,CAAC;QACtD,UAAU,CAAC,IAA8B;YACvC,IAAI,cAAc,EAAE,CAAC;gBACnB,MAAM,SAAS,GAAG,IAAI,cAAc,EAAE,CAAA;gBACtC,OAAO,IAAI,+BAAoB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;YAClD,CAAC;YAED,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,SAAS,GAAG,oCAAgB,CAAC,YAAY,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;gBACtE,IAAI,SAAS,EAAE,CAAC;oBACd,OAAO,IAAI,+BAAoB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;gBAClD,CAAC;YACH,CAAC;YAED,OAAO,IAAI,+BAAoB,CAAC,IAAI,CAAC,CAAA;QACvC,CAAC;QACD,MAAM,EAAE,CAAC,IAAA,2BAAkB,EAAC,WAAW,EAAE,UAAU,CAAC,CAAC;KACtD,CAAA;AACH,CAAC;AAED,SAAgB,mCAAmC,CACjD,OAAoD,EACpD,UAAmB;IAEnB,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QAC5B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,QAAQ,IAAI,MAAM,EAAE,CAAC;YACrD,OAAO,kCAAkC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;QACpG,CAAC;QACD,OAAO,kCAAkC,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,CAAA;IACrF,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1 @@
1
+ export { MikroOrmQueryService } from './mikro-orm-query.service';
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MikroOrmQueryService = void 0;
4
+ var mikro_orm_query_service_1 = require("./mikro-orm-query.service");
5
+ Object.defineProperty(exports, "MikroOrmQueryService", { enumerable: true, get: function () { return mikro_orm_query_service_1.MikroOrmQueryService; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/query-mikro-orm/src/services/index.ts"],"names":[],"mappings":";;;AAAA,qEAAgE;AAAvD,+HAAA,oBAAoB,OAAA"}
@@ -0,0 +1,25 @@
1
+ import { EntityRepository, FilterQuery, QueryOrderMap } from '@mikro-orm/core';
2
+ import { Assembler, Class, Filter, FilterComparisons, FindByIdOptions, FindRelationOptions, GetByIdOptions, NoOpQueryService, Query, QueryOptions, QueryRelationsOptions, SortField } from '@ptc-org/nestjs-query-core';
3
+ export declare class MikroOrmQueryService<DTO extends object, Entity extends object = DTO> extends NoOpQueryService<DTO, Entity> {
4
+ protected repo: EntityRepository<Entity>;
5
+ protected assembler?: Assembler<DTO, Entity>;
6
+ constructor(repo: EntityRepository<Entity>, assembler?: Assembler<DTO, Entity>);
7
+ getById(id: string | number, opts?: GetByIdOptions<DTO>): Promise<DTO>;
8
+ findById(id: string | number, opts?: FindByIdOptions<DTO>): Promise<DTO | undefined>;
9
+ query(query: Query<DTO>, _opts?: QueryOptions<DTO>): Promise<DTO[]>;
10
+ protected convertFilter(filter: Filter<DTO> | Filter<Entity> | undefined): FilterQuery<Entity>;
11
+ protected expandFilter(comparisons: FilterComparisons<unknown>): FilterQuery<Entity>;
12
+ protected expandFilterComparison(k: string, v: unknown): [string, unknown];
13
+ findRelation<Relation extends object>(RelationClass: Class<Relation>, relationName: string, entities: DTO | DTO[], opts?: FindRelationOptions<Relation>): Promise<Map<DTO, Relation | undefined> | Relation | undefined>;
14
+ private findRelationForEntity;
15
+ private loadRelationForEntity;
16
+ private matchesFilter;
17
+ countRelations<RelationDTO>(RelationClass: Class<RelationDTO>, relationName: string, dto: DTO, filter: Filter<RelationDTO>, opts?: QueryRelationsOptions): Promise<number>;
18
+ countRelations<RelationDTO>(RelationClass: Class<RelationDTO>, relationName: string, dto: DTO[], filter: Filter<RelationDTO>, opts?: QueryRelationsOptions): Promise<Map<DTO, number>>;
19
+ private countRelationsForEntity;
20
+ queryRelations<RelationDTO>(RelationClass: Class<RelationDTO>, relationName: string, entities: DTO, query: Query<RelationDTO>, opts?: QueryRelationsOptions): Promise<RelationDTO[]>;
21
+ queryRelations<RelationDTO>(RelationClass: Class<RelationDTO>, relationName: string, entities: DTO[], query: Query<RelationDTO>, opts?: QueryRelationsOptions): Promise<Map<DTO, RelationDTO[]>>;
22
+ private queryRelationsForEntity;
23
+ convertSorting<T = Entity>(sorting: Array<SortField<unknown>> | undefined): Array<QueryOrderMap<T>>;
24
+ private convertSortDirection;
25
+ }
@@ -0,0 +1,273 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MikroOrmQueryService = void 0;
4
+ const core_1 = require("@mikro-orm/core");
5
+ const nestjs_query_core_1 = require("@ptc-org/nestjs-query-core");
6
+ class MikroOrmQueryService extends nestjs_query_core_1.NoOpQueryService {
7
+ constructor(repo, assembler) {
8
+ super();
9
+ this.repo = repo;
10
+ this.assembler = assembler;
11
+ }
12
+ async getById(id, opts) {
13
+ const where = this.convertFilter(opts?.filter);
14
+ const meta = this.repo.getEntityManager().getMetadata().get(this.repo.getEntityName());
15
+ const pkField = meta.primaryKeys[0];
16
+ const entity = await this.repo.findOneOrFail({
17
+ ...where,
18
+ [pkField]: id
19
+ });
20
+ if (this.assembler) {
21
+ return this.assembler.convertToDTO(entity);
22
+ }
23
+ return entity;
24
+ }
25
+ async findById(id, opts) {
26
+ const where = this.convertFilter(opts?.filter);
27
+ const meta = this.repo.getEntityManager().getMetadata().get(this.repo.getEntityName());
28
+ const pkField = meta.primaryKeys[0];
29
+ const entity = await this.repo.findOne({
30
+ ...where,
31
+ [pkField]: id
32
+ });
33
+ if (!entity)
34
+ return undefined;
35
+ if (this.assembler) {
36
+ return this.assembler.convertToDTO(entity);
37
+ }
38
+ return entity;
39
+ }
40
+ async query(query, _opts) {
41
+ const convertedQuery = this.assembler?.convertQuery?.(query) ?? query;
42
+ const orderBy = this.convertSorting(convertedQuery.sorting);
43
+ const { limit, offset } = convertedQuery.paging ?? {};
44
+ const where = this.convertFilter(convertedQuery.filter);
45
+ const entities = await this.repo.findAll({
46
+ orderBy,
47
+ limit,
48
+ offset,
49
+ where
50
+ });
51
+ if (this.assembler) {
52
+ return this.assembler.convertToDTOs(entities);
53
+ }
54
+ return entities;
55
+ }
56
+ convertFilter(filter) {
57
+ if (!filter) {
58
+ return {};
59
+ }
60
+ const convertedFilter = this.assembler?.convertQuery?.({ filter })?.filter ?? filter;
61
+ if ((convertedFilter?.and || convertedFilter?.or) && Object.keys(convertedFilter).length > 1) {
62
+ throw new Error('filter must contain either only `and` or `or` property, or other properties');
63
+ }
64
+ if (convertedFilter?.and) {
65
+ return {
66
+ $and: convertedFilter.and.map((f) => this.convertFilter(f))
67
+ };
68
+ }
69
+ if (convertedFilter?.or) {
70
+ return {
71
+ $or: convertedFilter.or.map((f) => this.convertFilter(f))
72
+ };
73
+ }
74
+ return this.expandFilter(convertedFilter);
75
+ }
76
+ expandFilter(comparisons) {
77
+ const filters = Object.entries(comparisons).map(([k, v]) => {
78
+ return this.expandFilterComparison(k, v);
79
+ });
80
+ return Object.fromEntries(filters);
81
+ }
82
+ expandFilterComparison(k, v) {
83
+ if (k === 'eq' || k === 'is') {
84
+ return ['$eq', v];
85
+ }
86
+ if (k === 'neq' || k === 'isNot') {
87
+ return ['$ne', v];
88
+ }
89
+ if (k === 'gt') {
90
+ return ['$gt', v];
91
+ }
92
+ if (k === 'gte') {
93
+ return ['$gte', v];
94
+ }
95
+ if (k === 'lt') {
96
+ return ['$lt', v];
97
+ }
98
+ if (k === 'lte') {
99
+ return ['$lte', v];
100
+ }
101
+ if (k === 'in') {
102
+ return ['$in', v];
103
+ }
104
+ if (k === 'notIn') {
105
+ return ['$nin', v];
106
+ }
107
+ if (k === 'like') {
108
+ return ['$like', v];
109
+ }
110
+ if (k === 'notLike') {
111
+ return ['$not', { $like: v }];
112
+ }
113
+ if (k === 'iLike') {
114
+ return ['$ilike', v];
115
+ }
116
+ if (k === 'notILike') {
117
+ return ['$not', { $ilike: v }];
118
+ }
119
+ return [k, this.expandFilter(v)];
120
+ }
121
+ async findRelation(RelationClass, relationName, entities, opts) {
122
+ if (!Array.isArray(entities)) {
123
+ const dto = entities;
124
+ const entity = this.assembler ? await Promise.resolve(this.assembler.convertToEntity(dto)) : dto;
125
+ const relation = await this.findRelationForEntity(entity, relationName, opts);
126
+ return relation;
127
+ }
128
+ const entries = await Promise.all(entities.map(async (dto) => {
129
+ const entity = this.assembler ? await Promise.resolve(this.assembler.convertToEntity(dto)) : dto;
130
+ const relation = await this.findRelationForEntity(entity, relationName, opts);
131
+ return [dto, relation];
132
+ }));
133
+ return new Map(entries);
134
+ }
135
+ async findRelationForEntity(entity, relationName, opts) {
136
+ if (opts?.withDeleted) {
137
+ throw new Error('MikroOrmQueryService does not support withDeleted on findRelation');
138
+ }
139
+ const relation = await this.loadRelationForEntity(entity, relationName);
140
+ if (!relation)
141
+ return undefined;
142
+ if (opts?.filter && Object.keys(opts.filter).length > 0) {
143
+ return this.matchesFilter(relation, opts.filter);
144
+ }
145
+ return relation;
146
+ }
147
+ async loadRelationForEntity(entity, relationName) {
148
+ const relationRef = entity[relationName];
149
+ if (!relationRef) {
150
+ const em = this.repo.getEntityManager();
151
+ await em.populate(entity, [relationName]);
152
+ const loadedRef = entity[relationName];
153
+ if (!loadedRef)
154
+ return undefined;
155
+ if ('load' in loadedRef) {
156
+ return (await loadedRef.load()) ?? undefined;
157
+ }
158
+ return loadedRef;
159
+ }
160
+ if ('load' in relationRef) {
161
+ const relation = (await relationRef.load()) ?? undefined;
162
+ return relation;
163
+ }
164
+ const wrapped = (0, core_1.wrap)(relationRef);
165
+ if (!wrapped.isInitialized()) {
166
+ const em = this.repo.getEntityManager();
167
+ await em.refresh(relationRef);
168
+ }
169
+ return relationRef;
170
+ }
171
+ async matchesFilter(relation, filter) {
172
+ const em = this.repo.getEntityManager();
173
+ const where = this.convertFilter(filter);
174
+ const wrapped = (0, core_1.wrap)(relation, true);
175
+ const pk = wrapped.getPrimaryKey();
176
+ const found = await em.findOne(relation.constructor, {
177
+ ...where,
178
+ [wrapped.__meta.primaryKeys[0]]: pk
179
+ });
180
+ return found ?? undefined;
181
+ }
182
+ async countRelations(RelationClass, relationName, entities, filter, opts) {
183
+ if (opts?.withDeleted) {
184
+ throw new Error('MikroOrmQueryService does not support withDeleted on countRelations');
185
+ }
186
+ if (!Array.isArray(entities)) {
187
+ const dto = entities;
188
+ const entity = this.assembler ? await Promise.resolve(this.assembler.convertToEntity(dto)) : dto;
189
+ const count = await this.countRelationsForEntity(entity, relationName, filter);
190
+ return count;
191
+ }
192
+ const entries = await Promise.all(entities.map(async (dto) => {
193
+ const entity = this.assembler ? await Promise.resolve(this.assembler.convertToEntity(dto)) : dto;
194
+ const count = await this.countRelationsForEntity(entity, relationName, filter);
195
+ return [dto, count];
196
+ }));
197
+ return new Map(entries);
198
+ }
199
+ async countRelationsForEntity(entity, relationName, filter) {
200
+ const where = this.convertFilter(filter);
201
+ const collection = entity[relationName];
202
+ const count = await collection.loadCount({ where });
203
+ return count;
204
+ }
205
+ async queryRelations(RelationClass, relationName, entities, query, opts) {
206
+ if (opts?.withDeleted) {
207
+ throw new Error('MikroOrmQueryService does not support withDeleted on queryRelations');
208
+ }
209
+ if (!Array.isArray(entities)) {
210
+ const dto = entities;
211
+ const entity = this.assembler ? await Promise.resolve(this.assembler.convertToEntity(dto)) : dto;
212
+ const relations = await this.queryRelationsForEntity(RelationClass, entity, relationName, query);
213
+ return relations;
214
+ }
215
+ const entries = await Promise.all(entities.map(async (dto) => {
216
+ const entity = this.assembler ? await Promise.resolve(this.assembler.convertToEntity(dto)) : dto;
217
+ const relations = await this.queryRelationsForEntity(RelationClass, entity, relationName, query);
218
+ return [dto, relations];
219
+ }));
220
+ return new Map(entries);
221
+ }
222
+ async queryRelationsForEntity(relationDtoClass, entity, relationName, query) {
223
+ const { offset, limit } = query.paging ?? {};
224
+ const where = this.convertFilter(query.filter);
225
+ const orderBy = this.convertSorting(query.sorting);
226
+ const collection = entity[relationName];
227
+ const relationEntities = !offset && !limit
228
+ ? await collection.loadItems({ orderBy, where })
229
+ : await collection.matching({
230
+ orderBy,
231
+ where,
232
+ offset,
233
+ limit
234
+ });
235
+ if (relationEntities.length === 0) {
236
+ return [];
237
+ }
238
+ const [relationEntity] = relationEntities;
239
+ const entityClass = Object.getPrototypeOf(relationEntity).constructor;
240
+ if (relationDtoClass === entityClass) {
241
+ return relationEntities;
242
+ }
243
+ const assembler = nestjs_query_core_1.AssemblerFactory.getAssembler(relationDtoClass, entityClass);
244
+ const relationDtos = await assembler.convertToDTOs(relationEntities);
245
+ return relationDtos;
246
+ }
247
+ convertSorting(sorting) {
248
+ return (sorting ?? []).map((s) => {
249
+ const direction = this.convertSortDirection(s);
250
+ return {
251
+ [s.field]: direction
252
+ };
253
+ });
254
+ }
255
+ convertSortDirection(s) {
256
+ switch (s.direction) {
257
+ case nestjs_query_core_1.SortDirection.ASC:
258
+ return s.nulls === nestjs_query_core_1.SortNulls.NULLS_FIRST
259
+ ? core_1.QueryOrder.ASC_NULLS_FIRST
260
+ : s.nulls === nestjs_query_core_1.SortNulls.NULLS_LAST
261
+ ? core_1.QueryOrder.ASC_NULLS_LAST
262
+ : core_1.QueryOrder.ASC;
263
+ case nestjs_query_core_1.SortDirection.DESC:
264
+ return s.nulls === nestjs_query_core_1.SortNulls.NULLS_FIRST
265
+ ? core_1.QueryOrder.DESC_NULLS_FIRST
266
+ : s.nulls === nestjs_query_core_1.SortNulls.NULLS_LAST
267
+ ? core_1.QueryOrder.DESC_NULLS_LAST
268
+ : core_1.QueryOrder.DESC;
269
+ }
270
+ }
271
+ }
272
+ exports.MikroOrmQueryService = MikroOrmQueryService;
273
+ //# sourceMappingURL=mikro-orm-query.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mikro-orm-query.service.js","sourceRoot":"","sources":["../../../../../packages/query-mikro-orm/src/services/mikro-orm-query.service.ts"],"names":[],"mappings":"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"}