@nest-boot/mikro-orm 7.0.1 → 7.2.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/dist/interfaces/mikro-orm-module-options.interface.d.ts +1 -1
- package/dist/mikro-orm.module.js +7 -4
- package/dist/mikro-orm.module.js.map +1 -1
- package/dist/services/entity.service.d.ts +11 -7
- package/dist/services/entity.service.js +53 -16
- package/dist/services/entity.service.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +2 -2
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { MikroOrmModuleOptions as BaseMikroOrmModuleOptions } from "@mikro-orm/nestjs";
|
|
2
|
-
export type MikroOrmModuleOptions = Omit<BaseMikroOrmModuleOptions, "registerRequestContext">;
|
|
2
|
+
export type MikroOrmModuleOptions = Omit<BaseMikroOrmModuleOptions, "registerRequestContext" | "context">;
|
package/dist/mikro-orm.module.js
CHANGED
|
@@ -33,10 +33,8 @@ let MikroOrmModule = class MikroOrmModule extends mikro_orm_module_definition_1.
|
|
|
33
33
|
}
|
|
34
34
|
onModuleInit() {
|
|
35
35
|
request_context_1.RequestContext.registerMiddleware("mikro-orm", (ctx, next) => {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
return next();
|
|
39
|
-
});
|
|
36
|
+
ctx.set(core_1.EntityManager, this.orm.em.fork({ useContext: true }));
|
|
37
|
+
return next();
|
|
40
38
|
});
|
|
41
39
|
}
|
|
42
40
|
};
|
|
@@ -50,6 +48,11 @@ exports.MikroOrmModule = MikroOrmModule = __decorate([
|
|
|
50
48
|
inject: [mikro_orm_module_definition_1.MODULE_OPTIONS_TOKEN],
|
|
51
49
|
useFactory: async (options) => ({
|
|
52
50
|
registerRequestContext: false,
|
|
51
|
+
context: () => {
|
|
52
|
+
if (request_context_1.RequestContext.isActive()) {
|
|
53
|
+
return request_context_1.RequestContext.get(core_1.EntityManager);
|
|
54
|
+
}
|
|
55
|
+
},
|
|
53
56
|
...(await (0, load_config_from_env_util_1.loadConfigFromEnv)()),
|
|
54
57
|
...options,
|
|
55
58
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mikro-orm.module.js","sourceRoot":"","sources":["../src/mikro-orm.module.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"mikro-orm.module.js","sourceRoot":"","sources":["../src/mikro-orm.module.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,0CAA0D;AAC1D,8CAAyE;AACzE,gEAGoC;AACpC,2CAA8D;AAG9D,+EAIuC;AACvC,iFAAsE;AA6B/D,IAAM,cAAc,GAApB,MAAM,cACX,SAAQ,qDAAuB;IAG/B,YAA6B,GAAa;QACxC,KAAK,EAAE,CAAC;QADmB,QAAG,GAAH,GAAG,CAAU;IAE1C,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,GAAG,IAAsD;QACzE,OAAO,uBAAkB,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,CAAC,aAAa,CAClB,GAAG,IAAyD;QAE5D,OAAO,uBAAkB,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,CAAC,YAAY,CACjB,GAAG,IAAwD;QAE3D,2EAA2E;QAC3E,OAAO,uBAAkB,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,YAAY;QACV,gCAAc,CAAC,kBAAkB,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YAC3D,GAAG,CAAC,GAAG,CAAC,oBAAa,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAC/D,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AA/BY,wCAAc;yBAAd,cAAc;IA3B1B,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,sCAAoB;YACpB,uBAAkB,CAAC,YAAY,CAAC;gBAC9B,MAAM,EAAE,CAAC,kDAAoB,CAAC;gBAC9B,UAAU,EAAE,KAAK,EAAE,OAA8B,EAAE,EAAE,CAAC,CAAC;oBACrD,sBAAsB,EAAE,KAAK;oBAC7B,OAAO,EAAE,GAAG,EAAE;wBACZ,IAAI,gCAAc,CAAC,QAAQ,EAAE,EAAE,CAAC;4BAC9B,OAAO,gCAAc,CAAC,GAAG,CAAC,oBAAa,CAAC,CAAC;wBAC3C,CAAC;oBACH,CAAC;oBACD,GAAG,CAAC,MAAM,IAAA,6CAAiB,GAAE,CAAC;oBAC9B,GAAG,OAAO;iBACX,CAAC;aACH,CAAC;SACH;QACD,SAAS,EAAE;YACT;gBACE,OAAO,EAAE,kDAAoB;gBAC7B,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,uDAAyB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;gBAC9D,UAAU,EAAE,CAAC,UAAiC,EAAE,EAAE,EAAE,CAAC,OAAO;aAC7D;SACF;QACD,OAAO,EAAE,CAAC,kDAAoB,CAAC;KAChC,CAAC;qCAKkC,eAAQ;GAJ/B,cAAc,CA+B1B"}
|
|
@@ -1,20 +1,24 @@
|
|
|
1
|
-
import { type AssignOptions, type EntityData, type EntityDTO, EntityManager, type ExpandQuery, FilterQuery, FindOptions, type FromEntityType, type IsSubset, type Loaded, type PopulatePath } from "@mikro-orm/core";
|
|
1
|
+
import { type AssignOptions, CountOptions, type EntityData, type EntityDTO, EntityManager, type ExpandQuery, FilterQuery, FindOptions, type FromEntityType, type IsSubset, type Loaded, type PopulatePath } from "@mikro-orm/core";
|
|
2
2
|
import type { RequiredEntityData } from "@mikro-orm/core/typings";
|
|
3
3
|
import { Type } from "@nestjs/common";
|
|
4
4
|
import type { IdEntity } from "../interfaces/id-entity.interface";
|
|
5
5
|
import type { ChunkByIdOptions } from "../types/chunk-by-id-options.type";
|
|
6
6
|
import type { IdOrEntity } from "../types/id-or-entity.type";
|
|
7
|
+
export interface EntityServiceOptions<Entity extends IdEntity> {
|
|
8
|
+
softDeleteKey?: keyof Entity;
|
|
9
|
+
}
|
|
7
10
|
export declare class EntityService<Entity extends IdEntity> {
|
|
8
11
|
#private;
|
|
9
12
|
protected readonly entityClass: Type<Entity>;
|
|
10
13
|
protected readonly em: EntityManager;
|
|
11
|
-
|
|
14
|
+
protected readonly options?: EntityServiceOptions<Entity> | undefined;
|
|
15
|
+
constructor(entityClass: Type<Entity>, em: EntityManager, options?: EntityServiceOptions<Entity> | undefined);
|
|
12
16
|
create(data: RequiredEntityData<Entity>): Promise<Entity>;
|
|
13
|
-
findOne(idOrEntityOrWhere: IdOrEntity<Entity> | FilterQuery<Entity
|
|
14
|
-
findOneOrFail(idOrEntityOrWhere: IdOrEntity<Entity> | FilterQuery<Entity>): Promise<Entity
|
|
15
|
-
findAll(where: FilterQuery<Entity
|
|
16
|
-
count(where: FilterQuery<Entity
|
|
17
|
+
findOne(idOrEntityOrWhere: IdOrEntity<Entity> | FilterQuery<NoInfer<Entity>>): Promise<Loaded<Entity> | null>;
|
|
18
|
+
findOneOrFail(idOrEntityOrWhere: IdOrEntity<Entity> | FilterQuery<Entity>): Promise<Loaded<Entity>>;
|
|
19
|
+
findAll<Hint extends string = never, Fields extends string = PopulatePath.ALL, Excludes extends string = never>(where: FilterQuery<NoInfer<Entity>>, options?: FindOptions<Entity, Hint, Fields, Excludes>): Promise<Loaded<Entity, Hint, Fields, Excludes>[]>;
|
|
20
|
+
count<Hint extends string = never>(where: FilterQuery<NoInfer<Entity>>, options?: CountOptions<Entity, Hint>): Promise<number>;
|
|
17
21
|
update<Naked extends FromEntityType<Entity> = FromEntityType<Entity>, Convert extends boolean = false, Data extends EntityData<Naked, Convert> | Partial<EntityDTO<Naked>> = EntityData<Naked, Convert> | Partial<EntityDTO<Naked>>>(idOrEntity: IdOrEntity<Entity>, data: Data & IsSubset<EntityData<Naked, Convert>, Data>, options?: AssignOptions<Convert>): Promise<Entity>;
|
|
18
|
-
remove(idOrEntity: IdOrEntity<Entity
|
|
22
|
+
remove(idOrEntity: IdOrEntity<Entity>, softDelete?: boolean): Promise<Entity>;
|
|
19
23
|
chunkById<Hint extends string = never, Fields extends string = PopulatePath.ALL, Excludes extends string = never>(where: ExpandQuery<Entity>, options: ChunkByIdOptions<Entity, Hint, Fields, Excludes>, callback: (entities: Loaded<Entity, Hint, Fields, Excludes>[]) => Promise<void>): Promise<this>;
|
|
20
24
|
}
|
|
@@ -15,10 +15,11 @@ const common_1 = require("@nestjs/common");
|
|
|
15
15
|
const dataloader_1 = __importDefault(require("dataloader"));
|
|
16
16
|
const lodash_1 = __importDefault(require("lodash"));
|
|
17
17
|
class EntityService {
|
|
18
|
-
constructor(entityClass, em) {
|
|
18
|
+
constructor(entityClass, em, options) {
|
|
19
19
|
_EntityService_instances.add(this);
|
|
20
20
|
this.entityClass = entityClass;
|
|
21
21
|
this.em = em;
|
|
22
|
+
this.options = options;
|
|
22
23
|
}
|
|
23
24
|
create(data) {
|
|
24
25
|
return __classPrivateFieldGet(this, _EntityService_instances, "a", _EntityService_createDataLoader_get).load(data);
|
|
@@ -28,7 +29,9 @@ class EntityService {
|
|
|
28
29
|
return await this.em.findOne(this.entityClass, idOrEntityOrWhere);
|
|
29
30
|
}
|
|
30
31
|
else {
|
|
31
|
-
return await __classPrivateFieldGet(this, _EntityService_instances, "a", _EntityService_getDataLoader_get).load(
|
|
32
|
+
return (await __classPrivateFieldGet(this, _EntityService_instances, "a", _EntityService_getDataLoader_get).load({
|
|
33
|
+
idOrEntity: idOrEntityOrWhere,
|
|
34
|
+
}));
|
|
32
35
|
}
|
|
33
36
|
}
|
|
34
37
|
async findOneOrFail(idOrEntityOrWhere) {
|
|
@@ -55,8 +58,11 @@ class EntityService {
|
|
|
55
58
|
}
|
|
56
59
|
return entity;
|
|
57
60
|
}
|
|
58
|
-
async remove(idOrEntity) {
|
|
59
|
-
const entity = await __classPrivateFieldGet(this, _EntityService_instances, "a", _EntityService_removeDataLoader_get).load(
|
|
61
|
+
async remove(idOrEntity, softDelete = true) {
|
|
62
|
+
const entity = await __classPrivateFieldGet(this, _EntityService_instances, "a", _EntityService_removeDataLoader_get).load({
|
|
63
|
+
idOrEntity,
|
|
64
|
+
softDelete,
|
|
65
|
+
});
|
|
60
66
|
if (entity instanceof Error) {
|
|
61
67
|
throw entity;
|
|
62
68
|
}
|
|
@@ -89,16 +95,35 @@ class EntityService {
|
|
|
89
95
|
}
|
|
90
96
|
exports.EntityService = EntityService;
|
|
91
97
|
_EntityService_instances = new WeakSet(), _EntityService_getDataLoader_get = function _EntityService_getDataLoader_get() {
|
|
92
|
-
return new dataloader_1.default(async (
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
98
|
+
return new dataloader_1.default(async (items) => {
|
|
99
|
+
const uow = this.em.getUnitOfWork();
|
|
100
|
+
// 获取所有 ID
|
|
101
|
+
const ids = items.map(({ idOrEntity }) => typeof idOrEntity === "object" ? idOrEntity.id : idOrEntity);
|
|
102
|
+
// 先尝试从 UnitOfWork 中获取已加载的实体
|
|
103
|
+
const entitiesFromUow = [];
|
|
104
|
+
const idsToFetch = [];
|
|
105
|
+
for (const id of ids) {
|
|
106
|
+
// 尝试从 UnitOfWork 的身份映射中获取实体
|
|
107
|
+
const entity = uow.getById(core_1.Utils.className(this.entityClass), id);
|
|
108
|
+
if (entity) {
|
|
109
|
+
entitiesFromUow.push(entity);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
idsToFetch.push(id);
|
|
100
113
|
}
|
|
101
|
-
|
|
114
|
+
}
|
|
115
|
+
// 如果有需要从数据库查询的 ID,则执行查询
|
|
116
|
+
let entitiesFromDb = [];
|
|
117
|
+
if (idsToFetch.length > 0) {
|
|
118
|
+
entitiesFromDb = await this.em.find(this.entityClass, {
|
|
119
|
+
id: { $in: idsToFetch },
|
|
120
|
+
}, { limit: idsToFetch.length });
|
|
121
|
+
}
|
|
122
|
+
// 合并 UnitOfWork 和数据库查询的结果
|
|
123
|
+
const allEntities = [...entitiesFromUow, ...entitiesFromDb];
|
|
124
|
+
// 按照原始顺序返回结果
|
|
125
|
+
return items.map(({ idOrEntity }) => {
|
|
126
|
+
return allEntities.find((entity) => entity.id === idOrEntity) ?? null;
|
|
102
127
|
});
|
|
103
128
|
}, { cache: false });
|
|
104
129
|
}, _EntityService_createDataLoader_get = function _EntityService_createDataLoader_get() {
|
|
@@ -132,14 +157,26 @@ _EntityService_instances = new WeakSet(), _EntityService_getDataLoader_get = fun
|
|
|
132
157
|
return entitiesOrErrors;
|
|
133
158
|
}, { cache: false });
|
|
134
159
|
}, _EntityService_removeDataLoader_get = function _EntityService_removeDataLoader_get() {
|
|
135
|
-
return new dataloader_1.default(async (
|
|
136
|
-
const entitiesOrErrors = (await Promise.all(
|
|
160
|
+
return new dataloader_1.default(async (items) => {
|
|
161
|
+
const entitiesOrErrors = (await Promise.all(items.map(({ idOrEntity }) => this.findOne(idOrEntity)))).map((entity) => {
|
|
137
162
|
if (entity === null) {
|
|
138
163
|
return new common_1.NotFoundException(`${this.entityClass.name.toLowerCase()}.not_found`);
|
|
139
164
|
}
|
|
140
|
-
this.em.remove(entity);
|
|
141
165
|
return entity;
|
|
142
166
|
});
|
|
167
|
+
entitiesOrErrors.forEach((entityOrError, index) => {
|
|
168
|
+
if (entityOrError instanceof Error) {
|
|
169
|
+
return entityOrError;
|
|
170
|
+
}
|
|
171
|
+
const { softDelete } = items[index];
|
|
172
|
+
const softDeleteKey = this.options?.softDeleteKey ?? "deletedAt";
|
|
173
|
+
if (softDelete && softDeleteKey in entityOrError) {
|
|
174
|
+
entityOrError[softDeleteKey] = new Date();
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
this.em.remove(entityOrError);
|
|
178
|
+
}
|
|
179
|
+
});
|
|
143
180
|
await this.em.flush();
|
|
144
181
|
return entitiesOrErrors;
|
|
145
182
|
}, { cache: false });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity.service.js","sourceRoot":"","sources":["../../src/services/entity.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"entity.service.js","sourceRoot":"","sources":["../../src/services/entity.service.ts"],"names":[],"mappings":"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"}
|