@tsed/mikro-orm 7.0.0-beta.1 → 7.0.0-beta.12
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/jest.config.js +4 -4
- package/lib/cjs/MikroOrmModule.js +13 -11
- package/lib/cjs/MikroOrmModule.js.map +1 -1
- package/lib/cjs/decorators/entityManager.d.ts +6 -6
- package/lib/cjs/decorators/entityManager.js +6 -6
- package/lib/cjs/decorators/entityManager.js.map +1 -1
- package/lib/cjs/decorators/orm.d.ts +5 -0
- package/lib/cjs/decorators/orm.js +12 -0
- package/lib/cjs/decorators/orm.js.map +1 -0
- package/lib/cjs/decorators/transactional.d.ts +6 -2
- package/lib/cjs/decorators/transactional.js +6 -2
- package/lib/cjs/decorators/transactional.js.map +1 -1
- package/lib/cjs/filters/OptimisticLockErrorFilter.js +1 -1
- package/lib/cjs/index.d.ts +12 -4
- package/lib/cjs/index.js +13 -5
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/interceptors/TransactionalInterceptor.d.ts +4 -2
- package/lib/cjs/interceptors/TransactionalInterceptor.js +39 -22
- package/lib/cjs/interceptors/TransactionalInterceptor.js.map +1 -1
- package/lib/cjs/package.json +3 -0
- package/lib/cjs/services/DBContext.d.ts +1 -1
- package/lib/cjs/services/DBContext.js +5 -5
- package/lib/cjs/services/DBContext.js.map +1 -1
- package/lib/cjs/services/MikroOrmFactory.d.ts +1 -1
- package/lib/cjs/services/MikroOrmFactory.js +5 -5
- package/lib/cjs/services/MikroOrmFactory.js.map +1 -1
- package/lib/cjs/services/MikroOrmRegistry.d.ts +5 -5
- package/lib/cjs/services/MikroOrmRegistry.js +26 -27
- package/lib/cjs/services/MikroOrmRegistry.js.map +1 -1
- package/lib/esm/MikroOrmModule.js +5 -3
- package/lib/esm/MikroOrmModule.js.map +1 -1
- package/lib/esm/decorators/entityManager.js +6 -6
- package/lib/esm/decorators/entityManager.js.map +1 -1
- package/lib/esm/decorators/orm.js +8 -0
- package/lib/esm/decorators/orm.js.map +1 -0
- package/lib/esm/decorators/transactional.js +6 -2
- package/lib/esm/decorators/transactional.js.map +1 -1
- package/lib/esm/index.js +13 -5
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/interceptors/TransactionalInterceptor.js +31 -14
- package/lib/esm/interceptors/TransactionalInterceptor.js.map +1 -1
- package/lib/esm/package.json +3 -0
- package/lib/esm/services/DBContext.js +3 -3
- package/lib/esm/services/DBContext.js.map +1 -1
- package/lib/esm/services/MikroOrmFactory.js +3 -3
- package/lib/esm/services/MikroOrmFactory.js.map +1 -1
- package/lib/esm/services/MikroOrmRegistry.js +23 -24
- package/lib/esm/services/MikroOrmRegistry.js.map +1 -1
- package/lib/types/decorators/entityManager.d.ts +6 -6
- package/lib/types/decorators/orm.d.ts +5 -0
- package/lib/types/decorators/transactional.d.ts +6 -2
- package/lib/types/index.d.ts +12 -4
- package/lib/types/interceptors/TransactionalInterceptor.d.ts +4 -2
- package/lib/types/services/DBContext.d.ts +1 -1
- package/lib/types/services/MikroOrmFactory.d.ts +1 -1
- package/lib/types/services/MikroOrmRegistry.d.ts +5 -5
- package/package.json +21 -16
- package/readme.md +36 -43
- package/tsconfig.compile.esm.json +1 -12
- package/lib/cjs/decorators/connection.d.ts +0 -1
- package/lib/cjs/decorators/connection.js +0 -8
- package/lib/cjs/decorators/connection.js.map +0 -1
- package/lib/cjs/decorators/index.d.ts +0 -3
- package/lib/cjs/decorators/index.js +0 -7
- package/lib/cjs/decorators/index.js.map +0 -1
- package/lib/cjs/filters/index.d.ts +0 -1
- package/lib/cjs/filters/index.js +0 -5
- package/lib/cjs/filters/index.js.map +0 -1
- package/lib/cjs/interceptors/index.d.ts +0 -1
- package/lib/cjs/interceptors/index.js +0 -5
- package/lib/cjs/interceptors/index.js.map +0 -1
- package/lib/cjs/services/index.d.ts +0 -4
- package/lib/cjs/services/index.js +0 -8
- package/lib/cjs/services/index.js.map +0 -1
- package/lib/esm/decorators/connection.js +0 -4
- package/lib/esm/decorators/connection.js.map +0 -1
- package/lib/esm/decorators/index.js +0 -4
- package/lib/esm/decorators/index.js.map +0 -1
- package/lib/esm/filters/index.js +0 -2
- package/lib/esm/filters/index.js.map +0 -1
- package/lib/esm/interceptors/index.js +0 -2
- package/lib/esm/interceptors/index.js.map +0 -1
- package/lib/esm/services/index.js +0 -5
- package/lib/esm/services/index.js.map +0 -1
- package/lib/types/decorators/connection.d.ts +0 -1
- package/lib/types/decorators/index.d.ts +0 -3
- package/lib/types/filters/index.d.ts +0 -1
- package/lib/types/interceptors/index.d.ts +0 -1
- package/lib/types/services/index.d.ts +0 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MikroOrmRegistry.js","sourceRoot":"","sources":["../../../src/services/MikroOrmRegistry.ts"],"names":[],"mappings":";;;;AAAA,uDAAkD;AAClD,iCAA4C;AAE5C,qCAAqD;AACrD,yCAAoC;AAGpC,IAAa,gBAAgB,GAA7B,MAAa,gBAAgB;IAG3B,YAAuC,MAAc,EAA6B,eAAgC;QAA3E,WAAM,GAAN,MAAM,CAAQ;QAA6B,oBAAe,GAAf,eAAe,CAAiB;QAFjG,
|
|
1
|
+
{"version":3,"file":"MikroOrmRegistry.js","sourceRoot":"","sources":["../../../src/services/MikroOrmRegistry.ts"],"names":[],"mappings":";;;;AAAA,uDAAkD;AAClD,iCAA4C;AAE5C,qCAAqD;AACrD,yCAAoC;AAGpC,IAAa,gBAAgB,GAA7B,MAAa,gBAAgB;IAG3B,YAAuC,MAAc,EAA6B,eAAgC;QAA3E,WAAM,GAAN,MAAM,CAAQ;QAA6B,oBAAe,GAAf,eAAe,CAAiB;QAFjG,cAAS,GAAG,IAAI,GAAG,EAAoB,CAAC;IAE4D,CAAC;IAE/G,KAAK,CAAC,QAAQ,CAA2B,OAAmB;QACjE,MAAM,WAAW,GAAG,IAAA,eAAQ,EAAS,OAAO,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;QAExE,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;YACzB,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAE,CAAC;SAC/B;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iDAAiD,EAAE,WAAW,CAAC,CAAC;QACjF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAE1C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAE5D,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAE1C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yCAAyC,EAAE,WAAW,CAAC,CAAC;QAEzE,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEM,GAAG,CAAC,cAAsB,SAAS;QACxC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACzC,CAAC;IAEM,GAAG,CAAC,cAAsB,SAAS;QACxC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACzC,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;QAE/C,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAkB,EAAE,EAAE,CAAC,IAAA,sBAAe,EAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAExG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,QAAkB;QACtC,IAAI,MAAM,QAAQ,CAAC,WAAW,EAAE,EAAE;YAChC,MAAM,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SAC7B;IACH,CAAC;CACF,CAAA;AA7CY,gBAAgB;IAD5B,IAAA,eAAU,GAAE;IAIE,mBAAA,IAAA,WAAM,GAAE,CAAA;IAAmC,mBAAA,IAAA,WAAM,GAAE,CAAA;6CAAjB,eAAM,EAA8C,iCAAe;GAHvG,gBAAgB,CA6C5B;AA7CY,4CAAgB","sourcesContent":["import {MikroOrmFactory} from \"./MikroOrmFactory\";\nimport {Inject, Injectable} from \"@tsed/di\";\nimport {IDatabaseDriver as DatabaseDriver, MikroORM, Options} from \"@mikro-orm/core\";\nimport {catchAsyncError, getValue} from \"@tsed/core\";\nimport {Logger} from \"@tsed/logger\";\n\n@Injectable()\nexport class MikroOrmRegistry {\n private readonly instances = new Map<string, MikroORM>();\n\n constructor(@Inject() private readonly logger: Logger, @Inject() private readonly mikroOrmFactory: MikroOrmFactory) {}\n\n public async register<T extends DatabaseDriver>(options: Options<T>): Promise<MikroORM> {\n const contextName = getValue<string>(options, \"contextName\", \"default\");\n\n if (this.has(contextName)) {\n return this.get(contextName)!;\n }\n\n this.logger.info(`Create connection with MikroOrm to database: %s`, contextName);\n this.logger.debug(`options: %j`, options);\n\n const instance = await this.mikroOrmFactory.create(options);\n\n this.instances.set(contextName, instance);\n\n this.logger.info(`Connected with MikroOrm to database: %s`, contextName);\n\n return instance;\n }\n\n public get(contextName: string = \"default\"): MikroORM | undefined {\n return this.instances.get(contextName);\n }\n\n public has(contextName: string = \"default\"): boolean {\n return this.instances.has(contextName);\n }\n\n public async clear(): Promise<void> {\n const instances = [...this.instances.values()];\n\n await Promise.all(instances.map((instance: MikroORM) => catchAsyncError(() => this.dispose(instance))));\n\n this.instances.clear();\n }\n\n private async dispose(instance: MikroORM): Promise<void> {\n if (await instance.isConnected()) {\n await instance.close(false);\n }\n }\n}\n"]}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import { __decorate, __metadata } from "tslib";
|
|
2
|
-
import { DBContext, MikroOrmRegistry, RetryStrategy } from "./services";
|
|
3
2
|
import { Configuration, Constant, Inject, Module, registerProvider } from "@tsed/di";
|
|
3
|
+
import { MikroOrmRegistry } from "./services/MikroOrmRegistry.js";
|
|
4
|
+
import { DBContext } from "./services/DBContext.js";
|
|
5
|
+
import { RetryStrategy } from "./services/RetryStrategy.js";
|
|
4
6
|
let MikroOrmModule = class MikroOrmModule {
|
|
5
7
|
async $onInit() {
|
|
6
|
-
const promises = this.settings.map((opts) => this.mikroOrmRegistry.
|
|
8
|
+
const promises = this.settings.map((opts) => this.mikroOrmRegistry.register(opts));
|
|
7
9
|
await Promise.all(promises);
|
|
8
10
|
}
|
|
9
11
|
$onDestroy() {
|
|
10
|
-
return this.mikroOrmRegistry.
|
|
12
|
+
return this.mikroOrmRegistry.clear();
|
|
11
13
|
}
|
|
12
14
|
};
|
|
13
15
|
__decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MikroOrmModule.js","sourceRoot":"","sources":["../../src/MikroOrmModule.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"MikroOrmModule.js","sourceRoot":"","sources":["../../src/MikroOrmModule.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAqB,gBAAgB,EAAC,MAAM,UAAU,CAAC;AAEtG,OAAO,EAAC,gBAAgB,EAAC,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAC,SAAS,EAAC,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAC,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAmBvD,IAAa,cAAc,GAA3B,MAAa,cAAc;IAOlB,KAAK,CAAC,OAAO;QAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAEnF,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAEM,UAAU;QACf,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;IACvC,CAAC;CACF,CAAA;AAdC;IADC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC;;gDACa;AAGtC;IADC,MAAM,EAAE;8BAC2B,gBAAgB;wDAAC;AAL1C,cAAc;IAJ1B,MAAM,CAAC;QACN,OAAO,EAAE,CAAC,SAAS,EAAE,gBAAgB,CAAC;QACtC,IAAI,EAAE,CAAC,aAAa,EAAE,gBAAgB,CAAC;KACxC,CAAC;GACW,cAAc,CAgB1B;SAhBY,cAAc;AAkB3B,uGAAuG;AACvG,gBAAgB,CAAC,EAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC","sourcesContent":["import {Configuration, Constant, Inject, Module, OnDestroy, OnInit, registerProvider} from \"@tsed/di\";\nimport {Options} from \"@mikro-orm/core\";\nimport {MikroOrmRegistry} from \"./services/MikroOrmRegistry\";\nimport {DBContext} from \"./services/DBContext\";\nimport {RetryStrategy} from \"./services/RetryStrategy\";\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace TsED {\n interface Configuration {\n /**\n * The the ORM configuration, entity metadata.\n * If you omit the `options` parameter, your CLI config will be used.\n */\n mikroOrm?: Options[];\n }\n }\n}\n\n@Module({\n imports: [DBContext, MikroOrmRegistry],\n deps: [Configuration, MikroOrmRegistry]\n})\nexport class MikroOrmModule implements OnDestroy, OnInit {\n @Constant(\"mikroOrm\", [])\n private readonly settings!: Options[];\n\n @Inject()\n private readonly mikroOrmRegistry!: MikroOrmRegistry;\n\n public async $onInit(): Promise<void> {\n const promises = this.settings.map((opts) => this.mikroOrmRegistry.register(opts));\n\n await Promise.all(promises);\n }\n\n public $onDestroy(): Promise<void> {\n return this.mikroOrmRegistry.clear();\n }\n}\n\n// TODO: the IoC container should provide null or undefined by default until tsedio/tsed#1694 is closed\nregisterProvider({provide: RetryStrategy, useValue: null});\n"]}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { Inject } from "@tsed/di";
|
|
2
|
-
import { MikroOrmRegistry } from "../services";
|
|
2
|
+
import { MikroOrmRegistry } from "../services/MikroOrmRegistry.js";
|
|
3
3
|
/**
|
|
4
|
-
* Get the entity manager for the given
|
|
5
|
-
* @param
|
|
4
|
+
* Get the entity manager for the given context name.
|
|
5
|
+
* @param {String} contextName
|
|
6
6
|
* @decorator
|
|
7
7
|
* @mikroOrm
|
|
8
8
|
*/
|
|
9
|
-
export const EntityManager = (
|
|
9
|
+
export const EntityManager = (contextName) => Inject(MikroOrmRegistry, (registry) => { var _a; return (_a = registry.get(contextName)) === null || _a === void 0 ? void 0 : _a.em; });
|
|
10
10
|
/**
|
|
11
|
-
* Get the entity manager for the given
|
|
12
|
-
* @param connectionName
|
|
11
|
+
* Get the entity manager for the given context name.
|
|
12
|
+
* @param {String} connectionName
|
|
13
13
|
* @decorator
|
|
14
14
|
* @mikroOrm
|
|
15
15
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entityManager.js","sourceRoot":"","sources":["../../../src/decorators/entityManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAC;AAChC,OAAO,EAAC,gBAAgB,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"entityManager.js","sourceRoot":"","sources":["../../../src/decorators/entityManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAC;AAChC,OAAO,EAAC,gBAAgB,EAAC,MAAM,8BAA8B,CAAC;AAE9D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,WAAoB,EAAqB,EAAE,CACvE,MAAM,CAAC,gBAAgB,EAAE,CAAC,QAA0B,EAAE,EAAE,WAAC,OAAA,MAAA,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,0CAAE,EAAE,CAAA,EAAA,CAAsB,CAAC;AAE/G;;;;;GAKG;AACH,MAAM,CAAC,MAAM,EAAE,GAAG,aAAa,CAAC","sourcesContent":["import {Inject} from \"@tsed/di\";\nimport {MikroOrmRegistry} from \"../services/MikroOrmRegistry\";\n\n/**\n * Get the entity manager for the given context name.\n * @param {String} contextName\n * @decorator\n * @mikroOrm\n */\nexport const EntityManager = (contextName?: string): PropertyDecorator =>\n Inject(MikroOrmRegistry, (registry: MikroOrmRegistry) => registry.get(contextName)?.em) as PropertyDecorator;\n\n/**\n * Get the entity manager for the given context name.\n * @param {String} connectionName\n * @decorator\n * @mikroOrm\n */\nexport const Em = EntityManager;\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { MikroOrmRegistry } from "../services/MikroOrmRegistry.js";
|
|
2
|
+
import { Inject } from "@tsed/di";
|
|
3
|
+
/**
|
|
4
|
+
* Get the ORM for the given context name.
|
|
5
|
+
* @param {String} contextName
|
|
6
|
+
*/
|
|
7
|
+
export const Orm = (contextName) => Inject(MikroOrmRegistry, (registry) => registry.get(contextName));
|
|
8
|
+
//# sourceMappingURL=orm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orm.js","sourceRoot":"","sources":["../../../src/decorators/orm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAC,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAC;AAEhC;;;GAGG;AACH,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,WAAoB,EAAqB,EAAE,CAC7D,MAAM,CAAC,gBAAgB,EAAE,CAAC,QAA0B,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAsB,CAAC","sourcesContent":["import {MikroOrmRegistry} from \"../services/MikroOrmRegistry\";\nimport {Inject} from \"@tsed/di\";\n\n/**\n * Get the ORM for the given context name.\n * @param {String} contextName\n */\nexport const Orm = (contextName?: string): PropertyDecorator =>\n Inject(MikroOrmRegistry, (registry: MikroOrmRegistry) => registry.get(contextName)) as PropertyDecorator;\n"]}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import { TransactionalInterceptor } from "../interceptors";
|
|
2
1
|
import { Intercept } from "@tsed/di";
|
|
3
|
-
|
|
2
|
+
import { TransactionalInterceptor } from "../interceptors/TransactionalInterceptor.js";
|
|
3
|
+
/**
|
|
4
|
+
* Register a new request context for your method and execute it inside the context.
|
|
5
|
+
* @param {String | TransactionOptions} contextNameOrOptions
|
|
6
|
+
*/
|
|
7
|
+
export const Transactional = (contextNameOrOptions) => Intercept(TransactionalInterceptor, contextNameOrOptions);
|
|
4
8
|
//# sourceMappingURL=transactional.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactional.js","sourceRoot":"","sources":["../../../src/decorators/transactional.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"transactional.js","sourceRoot":"","sources":["../../../src/decorators/transactional.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,UAAU,CAAC;AACnC,OAAO,EAAC,wBAAwB,EAAqB,MAAM,0CAA0C,CAAC;AAEtG;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,oBAAkD,EAAmB,EAAE,CACnG,SAAS,CAAC,wBAAwB,EAAE,oBAAoB,CAAC,CAAC","sourcesContent":["import {Intercept} from \"@tsed/di\";\nimport {TransactionalInterceptor, TransactionOptions} from \"../interceptors/TransactionalInterceptor\";\n\n/**\n * Register a new request context for your method and execute it inside the context.\n * @param {String | TransactionOptions} contextNameOrOptions\n */\nexport const Transactional = (contextNameOrOptions?: string | TransactionOptions): MethodDecorator =>\n Intercept(TransactionalInterceptor, contextNameOrOptions);\n"]}
|
package/lib/esm/index.js
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export * from "./
|
|
5
|
-
export * from "./
|
|
1
|
+
/**
|
|
2
|
+
* @file Automatically generated by barrelsby.
|
|
3
|
+
*/
|
|
4
|
+
export * from "./MikroOrmModule.js";
|
|
5
|
+
export * from "./decorators/entityManager.js";
|
|
6
|
+
export * from "./decorators/orm.js";
|
|
7
|
+
export * from "./decorators/transactional.js";
|
|
8
|
+
export * from "./filters/OptimisticLockErrorFilter.js";
|
|
9
|
+
export * from "./interceptors/TransactionalInterceptor.js";
|
|
10
|
+
export * from "./services/DBContext.js";
|
|
11
|
+
export * from "./services/MikroOrmFactory.js";
|
|
12
|
+
export * from "./services/MikroOrmRegistry.js";
|
|
13
|
+
export * from "./services/RetryStrategy.js";
|
|
6
14
|
//# sourceMappingURL=index.js.map
|
package/lib/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qCAAqC,CAAC;AACpD,cAAc,yCAAyC,CAAC;AACxD,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC","sourcesContent":["/**\n * @file Automatically generated by barrelsby.\n */\n\nexport * from \"./MikroOrmModule\";\nexport * from \"./decorators/entityManager\";\nexport * from \"./decorators/orm\";\nexport * from \"./decorators/transactional\";\nexport * from \"./filters/OptimisticLockErrorFilter\";\nexport * from \"./interceptors/TransactionalInterceptor\";\nexport * from \"./services/DBContext\";\nexport * from \"./services/MikroOrmFactory\";\nexport * from \"./services/MikroOrmRegistry\";\nexport * from \"./services/RetryStrategy\";\n"]}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { __decorate, __metadata, __param } from "tslib";
|
|
2
|
-
import { DBContext, MikroOrmRegistry, RetryStrategy } from "../services";
|
|
3
2
|
import { Inject, Interceptor } from "@tsed/di";
|
|
4
3
|
import { Logger } from "@tsed/logger";
|
|
4
|
+
import { MikroOrmRegistry } from "../services/MikroOrmRegistry.js";
|
|
5
|
+
import { DBContext } from "../services/DBContext.js";
|
|
6
|
+
import { RetryStrategy } from "../services/RetryStrategy.js";
|
|
5
7
|
let TransactionalInterceptor = class TransactionalInterceptor {
|
|
6
8
|
constructor(registry, context, logger, retryStrategy) {
|
|
7
9
|
this.registry = registry;
|
|
@@ -14,11 +16,11 @@ let TransactionalInterceptor = class TransactionalInterceptor {
|
|
|
14
16
|
if (options.retry && !this.retryStrategy) {
|
|
15
17
|
this.logger.warn(`To retry a transaction you have to implement a "${RetryStrategy.description}" interface`);
|
|
16
18
|
}
|
|
17
|
-
const ctx = this.context.
|
|
19
|
+
const ctx = this.context.entries();
|
|
18
20
|
if (!ctx) {
|
|
19
21
|
return this.runWithinNewCtx(next, options);
|
|
20
22
|
}
|
|
21
|
-
if (ctx.has(options.
|
|
23
|
+
if (ctx.has(options.contextName)) {
|
|
22
24
|
return next();
|
|
23
25
|
}
|
|
24
26
|
return this.runUnderCtx(next, ctx, options);
|
|
@@ -28,33 +30,48 @@ let TransactionalInterceptor = class TransactionalInterceptor {
|
|
|
28
30
|
return this.runUnderCtx(next, ctx, options);
|
|
29
31
|
}
|
|
30
32
|
runUnderCtx(next, ctx, options) {
|
|
31
|
-
const orm = this.registry.get(options.
|
|
32
|
-
|
|
33
|
+
const orm = this.registry.get(options.contextName);
|
|
34
|
+
if (!orm) {
|
|
35
|
+
throw new Error(`No such context: ${options.contextName}. Please register a corresponding MikroOrm instance using '@Configuration()' decorator.`);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* The fork method signature has been changed since v5.x,
|
|
39
|
+
* which might lead to unexpected behavior while using the @Transactional() decorator.
|
|
40
|
+
*
|
|
41
|
+
* ```diff
|
|
42
|
+
* - fork(clear = true, useContext = false): D[typeof EntityManagerType]
|
|
43
|
+
* + fork(options: ForkOptions = {}): D[typeof EntityManagerType] {
|
|
44
|
+
* ```
|
|
45
|
+
*
|
|
46
|
+
* To ensure backward compatibility with v4.x and add support for v5.x, provided the following workaround:
|
|
47
|
+
*/
|
|
48
|
+
const em = orm.em.fork({ clear: true, useContext: true }, true);
|
|
33
49
|
ctx.set(em.name, em);
|
|
34
|
-
const runInTransaction = () => this.executeInTransaction(options.
|
|
50
|
+
const runInTransaction = () => this.executeInTransaction(options.contextName, next);
|
|
35
51
|
return this.context.run(ctx, () => { var _a; return (options.retry ? (_a = this.retryStrategy) === null || _a === void 0 ? void 0 : _a.acquire(runInTransaction) : runInTransaction()); });
|
|
36
52
|
}
|
|
37
53
|
extractContextName(context) {
|
|
54
|
+
var _a;
|
|
38
55
|
const options = context.options || {};
|
|
39
|
-
let
|
|
56
|
+
let contextName;
|
|
40
57
|
let retry;
|
|
41
58
|
if (typeof options === "string") {
|
|
42
|
-
|
|
59
|
+
contextName = options;
|
|
43
60
|
}
|
|
44
61
|
else if (options) {
|
|
45
|
-
|
|
62
|
+
contextName = (_a = options.contextName) !== null && _a !== void 0 ? _a : options.connectionName;
|
|
46
63
|
retry = options.retry;
|
|
47
64
|
}
|
|
48
|
-
if (!
|
|
49
|
-
|
|
65
|
+
if (!contextName) {
|
|
66
|
+
contextName = "default";
|
|
50
67
|
}
|
|
51
68
|
if (!retry) {
|
|
52
69
|
retry = false;
|
|
53
70
|
}
|
|
54
|
-
return {
|
|
71
|
+
return { contextName, retry };
|
|
55
72
|
}
|
|
56
|
-
async executeInTransaction(
|
|
57
|
-
const em = this.context.get(
|
|
73
|
+
async executeInTransaction(contextName, next) {
|
|
74
|
+
const em = this.context.get(contextName);
|
|
58
75
|
const result = await next();
|
|
59
76
|
await (em === null || em === void 0 ? void 0 : em.flush());
|
|
60
77
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransactionalInterceptor.js","sourceRoot":"","sources":["../../../src/interceptors/TransactionalInterceptor.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"TransactionalInterceptor.js","sourceRoot":"","sources":["../../../src/interceptors/TransactionalInterceptor.ts"],"names":[],"mappings":"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","sourcesContent":["import {Inject, Interceptor, InterceptorContext, InterceptorMethods, InterceptorNext} from \"@tsed/di\";\nimport {EntityManager} from \"@mikro-orm/core\";\nimport {Logger} from \"@tsed/logger\";\nimport {MikroOrmRegistry} from \"../services/MikroOrmRegistry\";\nimport {DBContext} from \"../services/DBContext\";\nimport {RetryStrategy} from \"../services/RetryStrategy\";\n\nexport interface TransactionOptions {\n retry?: boolean;\n contextName?: string;\n}\n\n@Interceptor()\nexport class TransactionalInterceptor implements InterceptorMethods {\n constructor(\n @Inject() private readonly registry: MikroOrmRegistry,\n @Inject() private readonly context: DBContext,\n @Inject() private readonly logger: Logger,\n @Inject(RetryStrategy)\n private readonly retryStrategy?: RetryStrategy\n ) {}\n\n public async intercept(context: InterceptorContext<unknown>, next: InterceptorNext): Promise<unknown> {\n const options = this.extractContextName(context);\n\n if (options.retry && !this.retryStrategy) {\n this.logger.warn(`To retry a transaction you have to implement a \"${RetryStrategy.description}\" interface`);\n }\n\n const ctx = this.context.entries();\n\n if (!ctx) {\n return this.runWithinNewCtx(next, options);\n }\n\n if (ctx.has(options.contextName!)) {\n return next();\n }\n\n return this.runUnderCtx(next, ctx, options);\n }\n\n private runWithinNewCtx(next: InterceptorNext, options: TransactionOptions): Promise<unknown> | unknown {\n const ctx = new Map<string, EntityManager>();\n\n return this.runUnderCtx(next, ctx, options);\n }\n\n private runUnderCtx(next: InterceptorNext, ctx: Map<string, EntityManager>, options: TransactionOptions): Promise<unknown> | unknown {\n const orm = this.registry.get(options.contextName);\n\n if (!orm) {\n throw new Error(\n `No such context: ${options.contextName}. Please register a corresponding MikroOrm instance using '@Configuration()' decorator.`\n );\n }\n\n /**\n * The fork method signature has been changed since v5.x,\n * which might lead to unexpected behavior while using the @Transactional() decorator.\n *\n * ```diff\n * - fork(clear = true, useContext = false): D[typeof EntityManagerType]\n * + fork(options: ForkOptions = {}): D[typeof EntityManagerType] {\n * ```\n *\n * To ensure backward compatibility with v4.x and add support for v5.x, provided the following workaround:\n */\n const em = (\n orm.em.fork as (clearOrForkOptions?: boolean | {clear?: boolean; useContext?: boolean}, useContext?: boolean) => EntityManager\n )({clear: true, useContext: true}, true);\n\n ctx.set(em.name, em);\n\n const runInTransaction = () => this.executeInTransaction(options.contextName!, next);\n\n return this.context.run(ctx, () => (options.retry ? this.retryStrategy?.acquire(runInTransaction) : runInTransaction()));\n }\n\n private extractContextName(context: InterceptorContext<unknown>): TransactionOptions {\n const options = context.options || ({} as Partial<TransactionOptions> | string);\n\n let contextName: string | undefined;\n let retry: boolean | undefined;\n\n if (typeof options === \"string\") {\n contextName = options;\n } else if (options) {\n contextName = options.contextName ?? options.connectionName;\n retry = options.retry;\n }\n\n if (!contextName) {\n contextName = \"default\";\n }\n\n if (!retry) {\n retry = false;\n }\n\n return {contextName, retry};\n }\n\n private async executeInTransaction(contextName: string, next: InterceptorNext): Promise<unknown> {\n const em = this.context.get(contextName);\n\n const result = await next();\n\n await em?.flush();\n\n return result;\n }\n}\n"]}
|
|
@@ -14,15 +14,15 @@ let DBContext = class DBContext {
|
|
|
14
14
|
run(ctx, callback) {
|
|
15
15
|
return this.storage.run(ctx, callback);
|
|
16
16
|
}
|
|
17
|
-
|
|
17
|
+
entries() {
|
|
18
18
|
return this.storage.getStore();
|
|
19
19
|
}
|
|
20
20
|
get(contextName) {
|
|
21
|
-
const context = this.
|
|
21
|
+
const context = this.entries();
|
|
22
22
|
return context === null || context === void 0 ? void 0 : context.get(contextName);
|
|
23
23
|
}
|
|
24
24
|
has(contextName) {
|
|
25
|
-
const context = this.
|
|
25
|
+
const context = this.entries();
|
|
26
26
|
return !!(context === null || context === void 0 ? void 0 : context.has(contextName));
|
|
27
27
|
}
|
|
28
28
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DBContext.js","sourceRoot":"","sources":["../../../src/services/DBContext.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AAEpC,OAAO,EAAC,iBAAiB,EAAC,MAAM,aAAa,CAAC;AAG9C,IAAa,SAAS,GAAtB,MAAa,SAAS;IAGpB;QAFiB,YAAO,GAAG,IAAI,iBAAiB,EAA8B,CAAC;QAG7E,IAAI,iBAAiB,EAAE;YACrB,IAAI,CAAC,OAAO,GAAG,IAAI,iBAAiB,EAAE,CAAC;SACxC;aAAM;YACL,MAAM,IAAI,KAAK,CAAC,gEAAgE,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC;SAC5G;IACH,CAAC;IAEM,GAAG,CAAI,GAA+B,EAAE,QAA+B;QAC5E,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACzC,CAAC;IAEM,
|
|
1
|
+
{"version":3,"file":"DBContext.js","sourceRoot":"","sources":["../../../src/services/DBContext.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AAEpC,OAAO,EAAC,iBAAiB,EAAC,MAAM,aAAa,CAAC;AAG9C,IAAa,SAAS,GAAtB,MAAa,SAAS;IAGpB;QAFiB,YAAO,GAAG,IAAI,iBAAiB,EAA8B,CAAC;QAG7E,IAAI,iBAAiB,EAAE;YACrB,IAAI,CAAC,OAAO,GAAG,IAAI,iBAAiB,EAAE,CAAC;SACxC;aAAM;YACL,MAAM,IAAI,KAAK,CAAC,gEAAgE,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC;SAC5G;IACH,CAAC;IAEM,GAAG,CAAI,GAA+B,EAAE,QAA+B;QAC5E,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACzC,CAAC;IAEM,OAAO;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;IACjC,CAAC;IAEM,GAAG,CAAC,WAAmB;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAE/B,OAAO,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,GAAG,CAAC,WAAW,CAAC,CAAC;IACnC,CAAC;IAEM,GAAG,CAAC,WAAmB;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAE/B,OAAO,CAAC,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,GAAG,CAAC,WAAW,CAAC,CAAA,CAAC;IACrC,CAAC;CACF,CAAA;AA9BY,SAAS;IADrB,UAAU,EAAE;;GACA,SAAS,CA8BrB;SA9BY,SAAS","sourcesContent":["import {Injectable} from \"@tsed/di\";\nimport {EntityManager} from \"@mikro-orm/core\";\nimport {AsyncLocalStorage} from \"async_hooks\";\n\n@Injectable()\nexport class DBContext {\n private readonly storage = new AsyncLocalStorage<Map<string, EntityManager>>();\n\n constructor() {\n if (AsyncLocalStorage) {\n this.storage = new AsyncLocalStorage();\n } else {\n throw new Error(`AsyncLocalStorage is not available for your Node.js version (${process.versions.node}).`);\n }\n }\n\n public run<R>(ctx: Map<string, EntityManager>, callback: (...args: any[]) => R): R {\n return this.storage.run(ctx, callback);\n }\n\n public entries(): Map<string, EntityManager> | undefined {\n return this.storage.getStore();\n }\n\n public get(contextName: string): EntityManager | undefined {\n const context = this.entries();\n\n return context?.get(contextName);\n }\n\n public has(contextName: string): boolean {\n const context = this.entries();\n\n return !!context?.has(contextName);\n }\n}\n"]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { __decorate, __metadata } from "tslib";
|
|
2
|
-
import { DBContext } from "./DBContext";
|
|
2
|
+
import { DBContext } from "./DBContext.js";
|
|
3
3
|
import { MikroORM } from "@mikro-orm/core";
|
|
4
4
|
import { Inject, Injectable } from "@tsed/di";
|
|
5
5
|
let MikroOrmFactory = class MikroOrmFactory {
|
|
6
|
-
create(
|
|
6
|
+
create(options) {
|
|
7
7
|
return MikroORM.init({
|
|
8
|
-
...
|
|
8
|
+
...options,
|
|
9
9
|
context: (name) => this.dbContext.get(name)
|
|
10
10
|
});
|
|
11
11
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MikroOrmFactory.js","sourceRoot":"","sources":["../../../src/services/MikroOrmFactory.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AACtC,OAAO,EAAC,QAAQ,EAAU,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAC,MAAM,EAAE,UAAU,EAAC,MAAM,UAAU,CAAC;AAG5C,IAAa,eAAe,GAA5B,MAAa,eAAe;IAInB,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"MikroOrmFactory.js","sourceRoot":"","sources":["../../../src/services/MikroOrmFactory.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AACtC,OAAO,EAAC,QAAQ,EAAU,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAC,MAAM,EAAE,UAAU,EAAC,MAAM,UAAU,CAAC;AAG5C,IAAa,eAAe,GAA5B,MAAa,eAAe;IAInB,MAAM,CAAC,OAAgB;QAC5B,OAAO,QAAQ,CAAC,IAAI,CAAC;YACnB,GAAG,OAAO;YACV,OAAO,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;SACpD,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AARC;IADC,MAAM,EAAE;8BACoB,SAAS;kDAAC;AAF5B,eAAe;IAD3B,UAAU,EAAE;GACA,eAAe,CAU3B;SAVY,eAAe","sourcesContent":["import {DBContext} from \"./DBContext\";\nimport {MikroORM, Options} from \"@mikro-orm/core\";\nimport {Inject, Injectable} from \"@tsed/di\";\n\n@Injectable()\nexport class MikroOrmFactory {\n @Inject()\n private readonly dbContext!: DBContext;\n\n public create(options: Options): Promise<MikroORM> {\n return MikroORM.init({\n ...options,\n context: (name: string) => this.dbContext.get(name)\n });\n }\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { __decorate, __metadata, __param } from "tslib";
|
|
2
|
-
import { MikroOrmFactory } from "./MikroOrmFactory";
|
|
2
|
+
import { MikroOrmFactory } from "./MikroOrmFactory.js";
|
|
3
3
|
import { Inject, Injectable } from "@tsed/di";
|
|
4
4
|
import { catchAsyncError, getValue } from "@tsed/core";
|
|
5
5
|
import { Logger } from "@tsed/logger";
|
|
@@ -7,35 +7,34 @@ let MikroOrmRegistry = class MikroOrmRegistry {
|
|
|
7
7
|
constructor(logger, mikroOrmFactory) {
|
|
8
8
|
this.logger = logger;
|
|
9
9
|
this.mikroOrmFactory = mikroOrmFactory;
|
|
10
|
-
this.
|
|
10
|
+
this.instances = new Map();
|
|
11
11
|
}
|
|
12
|
-
async
|
|
13
|
-
const
|
|
14
|
-
if (this.has(
|
|
15
|
-
return this.get(
|
|
12
|
+
async register(options) {
|
|
13
|
+
const contextName = getValue(options, "contextName", "default");
|
|
14
|
+
if (this.has(contextName)) {
|
|
15
|
+
return this.get(contextName);
|
|
16
16
|
}
|
|
17
|
-
this.logger.info(`Create connection with MikroOrm to database: %s`,
|
|
18
|
-
this.logger.debug(`options: %j`,
|
|
19
|
-
const
|
|
20
|
-
this.
|
|
21
|
-
this.logger.info(`Connected with MikroOrm to database: %s`,
|
|
22
|
-
return
|
|
17
|
+
this.logger.info(`Create connection with MikroOrm to database: %s`, contextName);
|
|
18
|
+
this.logger.debug(`options: %j`, options);
|
|
19
|
+
const instance = await this.mikroOrmFactory.create(options);
|
|
20
|
+
this.instances.set(contextName, instance);
|
|
21
|
+
this.logger.info(`Connected with MikroOrm to database: %s`, contextName);
|
|
22
|
+
return instance;
|
|
23
23
|
}
|
|
24
|
-
get(
|
|
25
|
-
|
|
26
|
-
return this.connections.get(id);
|
|
24
|
+
get(contextName = "default") {
|
|
25
|
+
return this.instances.get(contextName);
|
|
27
26
|
}
|
|
28
|
-
has(
|
|
29
|
-
return this.
|
|
27
|
+
has(contextName = "default") {
|
|
28
|
+
return this.instances.has(contextName);
|
|
30
29
|
}
|
|
31
|
-
async
|
|
32
|
-
const
|
|
33
|
-
await Promise.all(
|
|
34
|
-
this.
|
|
30
|
+
async clear() {
|
|
31
|
+
const instances = [...this.instances.values()];
|
|
32
|
+
await Promise.all(instances.map((instance) => catchAsyncError(() => this.dispose(instance))));
|
|
33
|
+
this.instances.clear();
|
|
35
34
|
}
|
|
36
|
-
async dispose(
|
|
37
|
-
if (await
|
|
38
|
-
await
|
|
35
|
+
async dispose(instance) {
|
|
36
|
+
if (await instance.isConnected()) {
|
|
37
|
+
await instance.close(false);
|
|
39
38
|
}
|
|
40
39
|
}
|
|
41
40
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MikroOrmRegistry.js","sourceRoot":"","sources":["../../../src/services/MikroOrmRegistry.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAC,MAAM,EAAE,UAAU,EAAC,MAAM,UAAU,CAAC;AAE5C,OAAO,EAAC,eAAe,EAAE,QAAQ,EAAC,MAAM,YAAY,CAAC;AACrD,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AAGpC,IAAa,gBAAgB,GAA7B,MAAa,gBAAgB;IAG3B,YAAuC,MAAc,EAA6B,eAAgC;QAA3E,WAAM,GAAN,MAAM,CAAQ;QAA6B,oBAAe,GAAf,eAAe,CAAiB;QAFjG,
|
|
1
|
+
{"version":3,"file":"MikroOrmRegistry.js","sourceRoot":"","sources":["../../../src/services/MikroOrmRegistry.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAC,MAAM,EAAE,UAAU,EAAC,MAAM,UAAU,CAAC;AAE5C,OAAO,EAAC,eAAe,EAAE,QAAQ,EAAC,MAAM,YAAY,CAAC;AACrD,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AAGpC,IAAa,gBAAgB,GAA7B,MAAa,gBAAgB;IAG3B,YAAuC,MAAc,EAA6B,eAAgC;QAA3E,WAAM,GAAN,MAAM,CAAQ;QAA6B,oBAAe,GAAf,eAAe,CAAiB;QAFjG,cAAS,GAAG,IAAI,GAAG,EAAoB,CAAC;IAE4D,CAAC;IAE/G,KAAK,CAAC,QAAQ,CAA2B,OAAmB;QACjE,MAAM,WAAW,GAAG,QAAQ,CAAS,OAAO,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;QAExE,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;YACzB,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAE,CAAC;SAC/B;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iDAAiD,EAAE,WAAW,CAAC,CAAC;QACjF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAE1C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAE5D,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAE1C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yCAAyC,EAAE,WAAW,CAAC,CAAC;QAEzE,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEM,GAAG,CAAC,cAAsB,SAAS;QACxC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACzC,CAAC;IAEM,GAAG,CAAC,cAAsB,SAAS;QACxC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACzC,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;QAE/C,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAkB,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAExG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,QAAkB;QACtC,IAAI,MAAM,QAAQ,CAAC,WAAW,EAAE,EAAE;YAChC,MAAM,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SAC7B;IACH,CAAC;CACF,CAAA;AA7CY,gBAAgB;IAD5B,UAAU,EAAE;IAIE,WAAA,MAAM,EAAE,CAAA;IAAmC,WAAA,MAAM,EAAE,CAAA;qCAAjB,MAAM,EAA8C,eAAe;GAHvG,gBAAgB,CA6C5B;SA7CY,gBAAgB","sourcesContent":["import {MikroOrmFactory} from \"./MikroOrmFactory\";\nimport {Inject, Injectable} from \"@tsed/di\";\nimport {IDatabaseDriver as DatabaseDriver, MikroORM, Options} from \"@mikro-orm/core\";\nimport {catchAsyncError, getValue} from \"@tsed/core\";\nimport {Logger} from \"@tsed/logger\";\n\n@Injectable()\nexport class MikroOrmRegistry {\n private readonly instances = new Map<string, MikroORM>();\n\n constructor(@Inject() private readonly logger: Logger, @Inject() private readonly mikroOrmFactory: MikroOrmFactory) {}\n\n public async register<T extends DatabaseDriver>(options: Options<T>): Promise<MikroORM> {\n const contextName = getValue<string>(options, \"contextName\", \"default\");\n\n if (this.has(contextName)) {\n return this.get(contextName)!;\n }\n\n this.logger.info(`Create connection with MikroOrm to database: %s`, contextName);\n this.logger.debug(`options: %j`, options);\n\n const instance = await this.mikroOrmFactory.create(options);\n\n this.instances.set(contextName, instance);\n\n this.logger.info(`Connected with MikroOrm to database: %s`, contextName);\n\n return instance;\n }\n\n public get(contextName: string = \"default\"): MikroORM | undefined {\n return this.instances.get(contextName);\n }\n\n public has(contextName: string = \"default\"): boolean {\n return this.instances.has(contextName);\n }\n\n public async clear(): Promise<void> {\n const instances = [...this.instances.values()];\n\n await Promise.all(instances.map((instance: MikroORM) => catchAsyncError(() => this.dispose(instance))));\n\n this.instances.clear();\n }\n\n private async dispose(instance: MikroORM): Promise<void> {\n if (await instance.isConnected()) {\n await instance.close(false);\n }\n }\n}\n"]}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Get the entity manager for the given
|
|
3
|
-
* @param
|
|
2
|
+
* Get the entity manager for the given context name.
|
|
3
|
+
* @param {String} contextName
|
|
4
4
|
* @decorator
|
|
5
5
|
* @mikroOrm
|
|
6
6
|
*/
|
|
7
|
-
export declare const EntityManager: (
|
|
7
|
+
export declare const EntityManager: (contextName?: string | undefined) => PropertyDecorator;
|
|
8
8
|
/**
|
|
9
|
-
* Get the entity manager for the given
|
|
10
|
-
* @param connectionName
|
|
9
|
+
* Get the entity manager for the given context name.
|
|
10
|
+
* @param {String} connectionName
|
|
11
11
|
* @decorator
|
|
12
12
|
* @mikroOrm
|
|
13
13
|
*/
|
|
14
|
-
export declare const Em: (
|
|
14
|
+
export declare const Em: (contextName?: string | undefined) => PropertyDecorator;
|
|
@@ -1,2 +1,6 @@
|
|
|
1
|
-
import { TransactionOptions } from "../interceptors";
|
|
2
|
-
|
|
1
|
+
import { TransactionOptions } from "../interceptors/TransactionalInterceptor";
|
|
2
|
+
/**
|
|
3
|
+
* Register a new request context for your method and execute it inside the context.
|
|
4
|
+
* @param {String | TransactionOptions} contextNameOrOptions
|
|
5
|
+
*/
|
|
6
|
+
export declare const Transactional: (contextNameOrOptions?: string | TransactionOptions | undefined) => MethodDecorator;
|
package/lib/types/index.d.ts
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export * from "./services";
|
|
1
|
+
/**
|
|
2
|
+
* @file Automatically generated by barrelsby.
|
|
3
|
+
*/
|
|
5
4
|
export * from "./MikroOrmModule";
|
|
5
|
+
export * from "./decorators/entityManager";
|
|
6
|
+
export * from "./decorators/orm";
|
|
7
|
+
export * from "./decorators/transactional";
|
|
8
|
+
export * from "./filters/OptimisticLockErrorFilter";
|
|
9
|
+
export * from "./interceptors/TransactionalInterceptor";
|
|
10
|
+
export * from "./services/DBContext";
|
|
11
|
+
export * from "./services/MikroOrmFactory";
|
|
12
|
+
export * from "./services/MikroOrmRegistry";
|
|
13
|
+
export * from "./services/RetryStrategy";
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import { DBContext, MikroOrmRegistry, RetryStrategy } from "../services";
|
|
2
1
|
import { InterceptorContext, InterceptorMethods, InterceptorNext } from "@tsed/di";
|
|
3
2
|
import { Logger } from "@tsed/logger";
|
|
3
|
+
import { MikroOrmRegistry } from "../services/MikroOrmRegistry";
|
|
4
|
+
import { DBContext } from "../services/DBContext";
|
|
5
|
+
import { RetryStrategy } from "../services/RetryStrategy";
|
|
4
6
|
export interface TransactionOptions {
|
|
5
|
-
connectionName?: string;
|
|
6
7
|
retry?: boolean;
|
|
8
|
+
contextName?: string;
|
|
7
9
|
}
|
|
8
10
|
export declare class TransactionalInterceptor implements InterceptorMethods {
|
|
9
11
|
private readonly registry;
|
|
@@ -3,7 +3,7 @@ export declare class DBContext {
|
|
|
3
3
|
private readonly storage;
|
|
4
4
|
constructor();
|
|
5
5
|
run<R>(ctx: Map<string, EntityManager>, callback: (...args: any[]) => R): R;
|
|
6
|
-
|
|
6
|
+
entries(): Map<string, EntityManager> | undefined;
|
|
7
7
|
get(contextName: string): EntityManager | undefined;
|
|
8
8
|
has(contextName: string): boolean;
|
|
9
9
|
}
|
|
@@ -4,11 +4,11 @@ import { Logger } from "@tsed/logger";
|
|
|
4
4
|
export declare class MikroOrmRegistry {
|
|
5
5
|
private readonly logger;
|
|
6
6
|
private readonly mikroOrmFactory;
|
|
7
|
-
private readonly
|
|
7
|
+
private readonly instances;
|
|
8
8
|
constructor(logger: Logger, mikroOrmFactory: MikroOrmFactory);
|
|
9
|
-
|
|
10
|
-
get(
|
|
11
|
-
has(
|
|
12
|
-
|
|
9
|
+
register<T extends DatabaseDriver>(options: Options<T>): Promise<MikroORM>;
|
|
10
|
+
get(contextName?: string): MikroORM | undefined;
|
|
11
|
+
has(contextName?: string): boolean;
|
|
12
|
+
clear(): Promise<void>;
|
|
13
13
|
private dispose;
|
|
14
14
|
}
|
package/package.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tsed/mikro-orm",
|
|
3
|
-
"version": "7.0.0-beta.
|
|
3
|
+
"version": "7.0.0-beta.12",
|
|
4
4
|
"description": "MikroORM package for Ts.ED framework",
|
|
5
5
|
"private": false,
|
|
6
6
|
"source": "./src/index.ts",
|
|
7
7
|
"main": "./lib/cjs/index.js",
|
|
8
|
+
"module": "./lib/esm/index.js",
|
|
8
9
|
"typings": "./lib/types/index.d.ts",
|
|
9
10
|
"exports": {
|
|
10
11
|
"types": "./lib/types/index.d.ts",
|
|
@@ -13,38 +14,42 @@
|
|
|
13
14
|
"default": "./lib/esm/index.js"
|
|
14
15
|
},
|
|
15
16
|
"scripts": {
|
|
16
|
-
"build": "yarn run build:esm && yarn run build:cjs",
|
|
17
|
+
"build": "yarn barrels && yarn run build:esm && yarn run build:cjs",
|
|
17
18
|
"build:cjs": "tsc --build tsconfig.compile.json",
|
|
18
19
|
"build:esm": "tsc --build tsconfig.compile.esm.json",
|
|
20
|
+
"barrels": "yarn barrelsby --delete -d ./src -e \"\\.spec\\.ts\" -e \"__mock__\" -e \".benchmark.ts\"",
|
|
19
21
|
"test": "cross-env NODE_ENV=test jest"
|
|
20
22
|
},
|
|
21
23
|
"dependencies": {
|
|
22
|
-
"tslib": "2.
|
|
24
|
+
"tslib": "2.3.1"
|
|
23
25
|
},
|
|
24
26
|
"devDependencies": {
|
|
25
27
|
"@mikro-orm/core": "^4.5.9",
|
|
26
28
|
"@mikro-orm/mongodb": "^4.5.9",
|
|
27
|
-
"@tsed/common": "7.0.0-beta.
|
|
28
|
-
"@tsed/core": "7.0.0-beta.
|
|
29
|
-
"@tsed/di": "7.0.0-beta.
|
|
30
|
-
"@tsed/json-mapper": "7.0.0-beta.
|
|
31
|
-
"@tsed/logger": "
|
|
32
|
-
"@tsed/schema": "7.0.0-beta.
|
|
33
|
-
"@tsed/testing-mongoose": "7.0.0-beta.
|
|
29
|
+
"@tsed/common": "7.0.0-beta.12",
|
|
30
|
+
"@tsed/core": "7.0.0-beta.12",
|
|
31
|
+
"@tsed/di": "7.0.0-beta.12",
|
|
32
|
+
"@tsed/json-mapper": "7.0.0-beta.12",
|
|
33
|
+
"@tsed/logger": ">=6.1.1",
|
|
34
|
+
"@tsed/schema": "7.0.0-beta.12",
|
|
35
|
+
"@tsed/testing-mongoose": "7.0.0-beta.12",
|
|
34
36
|
"ts-mockito": "^2.6.1"
|
|
35
37
|
},
|
|
36
38
|
"peerDependencies": {
|
|
37
39
|
"@mikro-orm/core": ">=4.5.9",
|
|
38
|
-
"@tsed/common": "^7.0.0-beta.
|
|
39
|
-
"@tsed/core": "^7.0.0-beta.
|
|
40
|
-
"@tsed/di": "^7.0.0-beta.
|
|
41
|
-
"@tsed/logger": "
|
|
40
|
+
"@tsed/common": "^7.0.0-beta.12",
|
|
41
|
+
"@tsed/core": "^7.0.0-beta.12",
|
|
42
|
+
"@tsed/di": "^7.0.0-beta.12",
|
|
43
|
+
"@tsed/logger": ">=6.1.1"
|
|
42
44
|
},
|
|
43
45
|
"repository": "https://github.com/tsedio/tsed",
|
|
44
46
|
"bugs": {
|
|
45
47
|
"url": "https://github.com/tsedio/tsed/issues"
|
|
46
48
|
},
|
|
47
|
-
"homepage": "https://github.com/tsedio/tsed/tree/
|
|
49
|
+
"homepage": "https://github.com/tsedio/tsed/tree/beta/packages/orm/mikro-orm",
|
|
48
50
|
"author": "Romain Lenzotti",
|
|
49
|
-
"license": "MIT"
|
|
51
|
+
"license": "MIT",
|
|
52
|
+
"publishConfig": {
|
|
53
|
+
"tag": "beta"
|
|
54
|
+
}
|
|
50
55
|
}
|