@@ -20,6 +20,18 @@ async function tryRequire(name: string): Promise<Dictionary | undefined> {
20
20
}
21
21
}
22
22
23
+ // TODO: provide the package name via some platform method, prefer that over the static map when available
24
+ const PACKAGES = {
25
+ MongoDriver : '@mikro-orm/mongo' ,
26
+ MySqlDriver : '@mikro-orm/mysql' ,
27
+ MsSqlDriver : '@mikro-orm/mssql' ,
28
+ MariaDbDriver : '@mikro-orm/mariadb' ,
29
+ PostgreSqlDriver : '@mikro-orm/postgresql' ,
30
+ SqliteDriver : '@mikro-orm/sqlite' ,
31
+ LibSqlDriver : '@mikro-orm/libsql' ,
32
+ BetterSqliteDriver : '@mikro-orm/better-sqlite' ,
33
+ } as const ;
34
+
23
35
@Global ( )
24
36
@Module ( { } )
25
37
export class MikroOrmCoreModule implements OnApplicationShutdown {
@@ -34,11 +46,36 @@ export class MikroOrmCoreModule implements OnApplicationShutdown {
34
46
const mongo = await tryRequire ( '@mikro-orm/mongodb' ) ;
35
47
const em = await this . createEntityManager ( options ) ;
36
48
49
+ if ( em && ! contextName ) {
50
+ const packageName = PACKAGES [ em . getDriver ( ) . constructor . name as keyof typeof PACKAGES ] ;
51
+ const driverPackage = await tryRequire ( packageName ) ;
52
+
53
+ if ( driverPackage ) {
54
+ return {
55
+ module : MikroOrmCoreModule ,
56
+ providers : [
57
+ { provide : MIKRO_ORM_MODULE_OPTIONS , useValue : options || { } } ,
58
+ createMikroOrmProvider ( contextName ) ,
59
+ createMikroOrmProvider ( contextName , driverPackage . MikroORM ) ,
60
+ createEntityManagerProvider ( options ?. scope , EntityManager ) ,
61
+ createEntityManagerProvider ( options ?. scope , driverPackage . EntityManager ) ,
62
+ ] ,
63
+ exports : [
64
+ MikroORM ,
65
+ EntityManager ,
66
+ driverPackage . EntityManager ,
67
+ driverPackage . MikroORM ,
68
+ ] ,
69
+ } ;
70
+ }
71
+ }
72
+
37
73
return {
38
74
module : MikroOrmCoreModule ,
39
75
providers : [
40
76
{ provide : MIKRO_ORM_MODULE_OPTIONS , useValue : options || { } } ,
41
77
createMikroOrmProvider ( contextName ) ,
78
+ ...( mongo ? [ createMikroOrmProvider ( contextName , mongo . MikroORM ) ] : [ ] ) ,
42
79
createEntityManagerProvider ( options ?. scope , EntityManager , contextName ) ,
43
80
...( em ? [ createEntityManagerProvider ( options ?. scope , em . constructor as Type , contextName ) ] : [ ] ) ,
44
81
...( knex ? [ createEntityManagerProvider ( options ?. scope , knex . EntityManager , contextName ) ] : [ ] ) ,
@@ -49,7 +86,7 @@ export class MikroOrmCoreModule implements OnApplicationShutdown {
49
86
contextName ? getEntityManagerToken ( contextName ) : EntityManager ,
50
87
...( em && ! contextName ? [ em . constructor ] : [ ] ) ,
51
88
...( knex && ! contextName ? [ knex . EntityManager ] : [ ] ) ,
52
- ...( mongo && ! contextName ? [ mongo . EntityManager ] : [ ] ) ,
89
+ ...( mongo && ! contextName ? [ mongo . EntityManager , mongo . MikroORM ] : [ ] ) ,
53
90
] ,
54
91
} ;
55
92
}
@@ -60,6 +97,32 @@ export class MikroOrmCoreModule implements OnApplicationShutdown {
60
97
const mongo = await tryRequire ( '@mikro-orm/mongodb' ) ;
61
98
const em = await this . createEntityManager ( options ) ;
62
99
100
+ if ( em && ! contextName ) {
101
+ const packageName = PACKAGES [ em . getDriver ( ) . constructor . name as keyof typeof PACKAGES ] ;
102
+ const driverPackage = await tryRequire ( packageName ) ;
103
+
104
+ if ( driverPackage ) {
105
+ return {
106
+ module : MikroOrmCoreModule ,
107
+ imports : options . imports || [ ] ,
108
+ providers : [
109
+ ...( options . providers || [ ] ) ,
110
+ ...createAsyncProviders ( { ...options , contextName : options . contextName } ) ,
111
+ createMikroOrmProvider ( contextName ) ,
112
+ createMikroOrmProvider ( contextName , driverPackage . MikroORM ) ,
113
+ createEntityManagerProvider ( options ?. scope , EntityManager ) ,
114
+ createEntityManagerProvider ( options ?. scope , driverPackage . EntityManager ) ,
115
+ ] ,
116
+ exports : [
117
+ MikroORM ,
118
+ EntityManager ,
119
+ driverPackage . EntityManager ,
120
+ driverPackage . MikroORM ,
121
+ ] ,
122
+ } ;
123
+ }
124
+ }
125
+
63
126
return {
64
127
module : MikroOrmCoreModule ,
65
128
imports : options . imports || [ ] ,
@@ -77,7 +140,7 @@ export class MikroOrmCoreModule implements OnApplicationShutdown {
77
140
contextName ? getEntityManagerToken ( contextName ) : EntityManager ,
78
141
...( em && ! contextName ? [ em . constructor ] : [ ] ) ,
79
142
...( knex && ! contextName ? [ knex . EntityManager ] : [ ] ) ,
80
- ...( mongo && ! contextName ? [ mongo . EntityManager ] : [ ] ) ,
143
+ ...( mongo && ! contextName ? [ mongo . EntityManager , mongo . MikroORM ] : [ ] ) ,
81
144
] ,
82
145
} ;
83
146
}
0 commit comments