@nestjs-transactional/core 1.0.0 → 2.0.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/README.md +14 -0
- package/dist/bootstrap/transactional-methods.bootstrap.d.ts +2 -2
- package/dist/bootstrap/transactional-methods.bootstrap.js +19 -22
- package/dist/bootstrap/transactional-methods.bootstrap.js.map +1 -1
- package/dist/context/transaction-context-view.d.ts +1 -1
- package/dist/context/transaction-context-view.js +3 -7
- package/dist/context/transaction-context-view.js.map +1 -1
- package/dist/context/transaction.context.d.ts +2 -2
- package/dist/context/transaction.context.js +5 -9
- package/dist/context/transaction.context.js.map +1 -1
- package/dist/decorators/inject-decorators.js +6 -12
- package/dist/decorators/inject-decorators.js.map +1 -1
- package/dist/decorators/transactional.decorator.d.ts +1 -1
- package/dist/decorators/transactional.decorator.js +10 -17
- package/dist/decorators/transactional.decorator.js.map +1 -1
- package/dist/index.d.ts +18 -18
- package/dist/index.js +18 -34
- package/dist/index.js.map +1 -1
- package/dist/interceptor/transactional.interceptor.d.ts +1 -1
- package/dist/interceptor/transactional.interceptor.js +12 -15
- package/dist/interceptor/transactional.interceptor.js.map +1 -1
- package/dist/internal/markers.js +1 -4
- package/dist/internal/markers.js.map +1 -1
- package/dist/manager/adapter.registry.d.ts +1 -1
- package/dist/manager/adapter.registry.js +12 -15
- package/dist/manager/adapter.registry.js.map +1 -1
- package/dist/manager/transaction.manager.d.ts +3 -3
- package/dist/manager/transaction.manager.js +38 -41
- package/dist/manager/transaction.manager.js.map +1 -1
- package/dist/module/transactional.module.d.ts +2 -2
- package/dist/module/transactional.module.js +43 -46
- package/dist/module/transactional.module.js.map +1 -1
- package/dist/observability/transaction-observer.d.ts +1 -1
- package/dist/observability/transaction-observer.js +1 -4
- package/dist/observability/transaction-observer.js.map +1 -1
- package/dist/testing/in-memory.adapter.d.ts +3 -3
- package/dist/testing/in-memory.adapter.js +4 -8
- package/dist/testing/in-memory.adapter.js.map +1 -1
- package/dist/testing/index.d.ts +1 -1
- package/dist/testing/index.js +1 -17
- package/dist/testing/index.js.map +1 -1
- package/dist/tokens/constants.js +1 -4
- package/dist/tokens/constants.js.map +1 -1
- package/dist/tokens/index.d.ts +2 -2
- package/dist/tokens/index.js +2 -10
- package/dist/tokens/index.js.map +1 -1
- package/dist/tokens/token-utils.js +5 -11
- package/dist/tokens/token-utils.js.map +1 -1
- package/dist/types/domain-event.js +1 -2
- package/dist/types/errors.js +4 -11
- package/dist/types/errors.js.map +1 -1
- package/dist/types/isolation.js +1 -2
- package/dist/types/propagation.js +2 -5
- package/dist/types/propagation.js.map +1 -1
- package/dist/types/transaction-adapter.d.ts +2 -2
- package/dist/types/transaction-adapter.js +1 -2
- package/dist/types/transaction-handle.js +1 -2
- package/dist/types/transaction-options.d.ts +2 -2
- package/dist/types/transaction-options.js +1 -2
- package/package.json +18 -15
package/README.md
CHANGED
|
@@ -28,6 +28,20 @@ pnpm add @nestjs-transactional/core @nestjs-transactional/typeorm reflect-metada
|
|
|
28
28
|
Load `reflect-metadata` once at your entry point, as NestJS itself
|
|
29
29
|
requires.
|
|
30
30
|
|
|
31
|
+
## Module format
|
|
32
|
+
|
|
33
|
+
This package ships **ESM only**, matching NestJS 12, which is ESM-only
|
|
34
|
+
across its own packages. There is no CommonJS build.
|
|
35
|
+
|
|
36
|
+
A CommonJS application still works: Node loads ESM from `require()`
|
|
37
|
+
since 22.12.0, which is why `engines.node` is `>=22.13.0`. What does not
|
|
38
|
+
follow Node here is tooling with its own module loader — Jest above all,
|
|
39
|
+
which needs `NODE_OPTIONS=--experimental-vm-modules` and a few config
|
|
40
|
+
settings. The 19 example applications in the repository all run their
|
|
41
|
+
suites that way and can be copied from.
|
|
42
|
+
|
|
43
|
+
Reasoning and measurements: [ADR-022](https://github.com/igorgolovanov/nestjs-transactional/blob/main/docs/adr/022-esm-only-packaging.md).
|
|
44
|
+
|
|
31
45
|
## Quick start
|
|
32
46
|
|
|
33
47
|
```ts
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import 'reflect-metadata';
|
|
2
2
|
import { type OnApplicationBootstrap } from '@nestjs/common';
|
|
3
3
|
import { DiscoveryService, MetadataScanner } from '@nestjs/core';
|
|
4
|
-
import { TransactionManager } from '../manager/transaction.manager';
|
|
4
|
+
import { TransactionManager } from '../manager/transaction.manager.js';
|
|
5
5
|
/**
|
|
6
6
|
* `OnApplicationBootstrap` service that wraps every `@Transactional()`
|
|
7
7
|
* method on a plain `@Injectable()` provider with
|
|
@@ -10,7 +10,7 @@ import { TransactionManager } from '../manager/transaction.manager';
|
|
|
10
10
|
* This is the second of the three coordinated wrapping mechanisms
|
|
11
11
|
* described in ADR-005:
|
|
12
12
|
*
|
|
13
|
-
* 1. {@link import('../interceptor/transactional.interceptor').TransactionalInterceptor}
|
|
13
|
+
* 1. {@link import('../interceptor/transactional.interceptor.js').TransactionalInterceptor}
|
|
14
14
|
* — for controller / resolver / gateway request-boundary handlers.
|
|
15
15
|
* 2. This class — for regular `@Injectable` services.
|
|
16
16
|
* 3. `CqrsHandlerWrapper` (in `@nestjs-transactional/cqrs`) — for CQRS
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
2
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
3
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -9,14 +8,12 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
9
8
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
9
|
};
|
|
11
10
|
var TransactionalMethodsBootstrap_1;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const markers_1 = require("../internal/markers");
|
|
19
|
-
const transaction_manager_1 = require("../manager/transaction.manager");
|
|
11
|
+
import 'reflect-metadata';
|
|
12
|
+
import { Injectable, Logger } from '@nestjs/common';
|
|
13
|
+
import { DiscoveryService, MetadataScanner } from '@nestjs/core';
|
|
14
|
+
import { TRANSACTIONAL_METADATA, getTransactionalMetadata, } from '../decorators/transactional.decorator.js';
|
|
15
|
+
import { WRAPPED_MARKER } from '../internal/markers.js';
|
|
16
|
+
import { TransactionManager } from '../manager/transaction.manager.js';
|
|
20
17
|
/**
|
|
21
18
|
* Metadata keys set by `@nestjs/cqrs`'s handler decorators. Mirrored here
|
|
22
19
|
* so the bootstrap skips CQRS handler classes — they are wrapped by
|
|
@@ -37,7 +34,7 @@ const CQRS_HANDLER_KEYS = [
|
|
|
37
34
|
* This is the second of the three coordinated wrapping mechanisms
|
|
38
35
|
* described in ADR-005:
|
|
39
36
|
*
|
|
40
|
-
* 1. {@link import('../interceptor/transactional.interceptor').TransactionalInterceptor}
|
|
37
|
+
* 1. {@link import('../interceptor/transactional.interceptor.js').TransactionalInterceptor}
|
|
41
38
|
* — for controller / resolver / gateway request-boundary handlers.
|
|
42
39
|
* 2. This class — for regular `@Injectable` services.
|
|
43
40
|
* 3. `CqrsHandlerWrapper` (in `@nestjs-transactional/cqrs`) — for CQRS
|
|
@@ -60,7 +57,7 @@ let TransactionalMethodsBootstrap = TransactionalMethodsBootstrap_1 = class Tran
|
|
|
60
57
|
discovery;
|
|
61
58
|
metadataScanner;
|
|
62
59
|
manager;
|
|
63
|
-
logger = new
|
|
60
|
+
logger = new Logger(TransactionalMethodsBootstrap_1.name);
|
|
64
61
|
constructor(discovery, metadataScanner, manager) {
|
|
65
62
|
this.discovery = discovery;
|
|
66
63
|
this.metadataScanner = metadataScanner;
|
|
@@ -81,7 +78,7 @@ let TransactionalMethodsBootstrap = TransactionalMethodsBootstrap_1 = class Tran
|
|
|
81
78
|
const prototype = Object.getPrototypeOf(instance);
|
|
82
79
|
if (prototype === null)
|
|
83
80
|
continue;
|
|
84
|
-
const classMetadata =
|
|
81
|
+
const classMetadata = getTransactionalMetadata(metatype);
|
|
85
82
|
const methodNames = this.metadataScanner.getAllMethodNames(prototype);
|
|
86
83
|
const methods = prototype;
|
|
87
84
|
const host = instance;
|
|
@@ -89,13 +86,13 @@ let TransactionalMethodsBootstrap = TransactionalMethodsBootstrap_1 = class Tran
|
|
|
89
86
|
const protoMethod = methods[methodName];
|
|
90
87
|
if (typeof protoMethod !== 'function')
|
|
91
88
|
continue;
|
|
92
|
-
const metadata =
|
|
89
|
+
const metadata = getTransactionalMetadata(protoMethod) ?? classMetadata;
|
|
93
90
|
if (metadata === undefined)
|
|
94
91
|
continue;
|
|
95
92
|
const currentMethod = host[methodName];
|
|
96
93
|
if (typeof currentMethod !== 'function')
|
|
97
94
|
continue;
|
|
98
|
-
if (Reflect.getMetadata(
|
|
95
|
+
if (Reflect.getMetadata(WRAPPED_MARKER, currentMethod) === true)
|
|
99
96
|
continue;
|
|
100
97
|
if (this.wrapMethod(host, methodName, currentMethod, instance, metadata)) {
|
|
101
98
|
wrappedCount++;
|
|
@@ -111,19 +108,19 @@ let TransactionalMethodsBootstrap = TransactionalMethodsBootstrap_1 = class Tran
|
|
|
111
108
|
const boundOriginal = currentMethod.bind(instance);
|
|
112
109
|
const manager = this.manager;
|
|
113
110
|
const wrapped = (...args) => manager.run(metadata, () => Promise.resolve(boundOriginal(...args)));
|
|
114
|
-
Reflect.defineMetadata(
|
|
115
|
-
Reflect.defineMetadata(
|
|
111
|
+
Reflect.defineMetadata(WRAPPED_MARKER, true, wrapped);
|
|
112
|
+
Reflect.defineMetadata(TRANSACTIONAL_METADATA, metadata, wrapped);
|
|
116
113
|
host[methodName] = wrapped;
|
|
117
114
|
this.logger.debug(`Wrapped ${instance.constructor.name}.${methodName} ` +
|
|
118
115
|
`(propagation=${metadata.propagation ?? 'REQUIRED'})`);
|
|
119
116
|
return true;
|
|
120
117
|
}
|
|
121
118
|
};
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
(
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
transaction_manager_1.TransactionManager])
|
|
119
|
+
TransactionalMethodsBootstrap = TransactionalMethodsBootstrap_1 = __decorate([
|
|
120
|
+
Injectable(),
|
|
121
|
+
__metadata("design:paramtypes", [DiscoveryService,
|
|
122
|
+
MetadataScanner,
|
|
123
|
+
TransactionManager])
|
|
128
124
|
], TransactionalMethodsBootstrap);
|
|
125
|
+
export { TransactionalMethodsBootstrap };
|
|
129
126
|
//# sourceMappingURL=transactional-methods.bootstrap.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactional-methods.bootstrap.js","sourceRoot":"","sources":["../../src/bootstrap/transactional-methods.bootstrap.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"transactional-methods.bootstrap.js","sourceRoot":"","sources":["../../src/bootstrap/transactional-methods.bootstrap.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type ActiveTransaction } from './transaction.context';
|
|
1
|
+
import { type ActiveTransaction } from './transaction.context.js';
|
|
2
2
|
/**
|
|
3
3
|
* Per-dataSource read-only view over {@link TransactionContext}'s active
|
|
4
4
|
* transaction Map (DD-022). Bound to a single dataSource name at
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TransactionContextView = void 0;
|
|
4
|
-
const transaction_context_1 = require("./transaction.context");
|
|
1
|
+
import { TransactionContext } from './transaction.context.js';
|
|
5
2
|
/**
|
|
6
3
|
* Per-dataSource read-only view over {@link TransactionContext}'s active
|
|
7
4
|
* transaction Map (DD-022). Bound to a single dataSource name at
|
|
@@ -18,7 +15,7 @@ const transaction_context_1 = require("./transaction.context");
|
|
|
18
15
|
* `getTransactionContextToken(dataSource)`. Inject via
|
|
19
16
|
* `@InjectTransactionContext(dataSource?)`.
|
|
20
17
|
*/
|
|
21
|
-
class TransactionContextView {
|
|
18
|
+
export class TransactionContextView {
|
|
22
19
|
dataSource;
|
|
23
20
|
/**
|
|
24
21
|
* @param dataSource - Public dataSource name this view is bound to.
|
|
@@ -33,7 +30,7 @@ class TransactionContextView {
|
|
|
33
30
|
* `TransactionContext.getActiveTransactionByDataSource(this.dataSource)`.
|
|
34
31
|
*/
|
|
35
32
|
getActiveTransaction() {
|
|
36
|
-
return
|
|
33
|
+
return TransactionContext.getActiveTransactionByDataSource(this.dataSource);
|
|
37
34
|
}
|
|
38
35
|
/**
|
|
39
36
|
* Predicate convenience over {@link getActiveTransaction}. Useful for
|
|
@@ -44,5 +41,4 @@ class TransactionContextView {
|
|
|
44
41
|
return this.getActiveTransaction() !== undefined;
|
|
45
42
|
}
|
|
46
43
|
}
|
|
47
|
-
exports.TransactionContextView = TransactionContextView;
|
|
48
44
|
//# sourceMappingURL=transaction-context-view.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction-context-view.js","sourceRoot":"","sources":["../../src/context/transaction-context-view.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"transaction-context-view.js","sourceRoot":"","sources":["../../src/context/transaction-context-view.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEtF;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,sBAAsB;IAKZ;IAJrB;;;OAGG;IACH,YAAqB,UAAkB;QAAlB,eAAU,GAAV,UAAU,CAAQ;IAAG,CAAC;IAE3C;;;;OAIG;IACH,oBAAoB;QAClB,OAAO,kBAAkB,CAAC,gCAAgC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9E,CAAC;IAED;;;;OAIG;IACH,oBAAoB;QAClB,OAAO,IAAI,CAAC,oBAAoB,EAAE,KAAK,SAAS,CAAC;IACnD,CAAC;CACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { TransactionHandle } from '../types/transaction-handle';
|
|
2
|
-
import type { TransactionOptions } from '../types/transaction-options';
|
|
1
|
+
import type { TransactionHandle } from '../types/transaction-handle.js';
|
|
2
|
+
import type { TransactionOptions } from '../types/transaction-options.js';
|
|
3
3
|
/**
|
|
4
4
|
* A single transaction currently live on the async context. Adapters register
|
|
5
5
|
* one of these under their `adapterInstanceName` when they begin a transaction
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const node_async_hooks_1 = require("node:async_hooks");
|
|
5
|
-
const errors_1 = require("../types/errors");
|
|
6
|
-
const als = new node_async_hooks_1.AsyncLocalStorage();
|
|
1
|
+
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
|
+
import { IllegalTransactionStateError } from '../types/errors.js';
|
|
3
|
+
const als = new AsyncLocalStorage();
|
|
7
4
|
/**
|
|
8
5
|
* Thin façade over `AsyncLocalStorage` that carries the active
|
|
9
6
|
* {@link TransactionContextStore} across async boundaries. This is the
|
|
@@ -25,7 +22,7 @@ const als = new node_async_hooks_1.AsyncLocalStorage();
|
|
|
25
22
|
* cross-package consumers migrate to the dataSource-name lookup and
|
|
26
23
|
* no backwards-compatibility constraints remain.
|
|
27
24
|
*/
|
|
28
|
-
class TransactionContext {
|
|
25
|
+
export class TransactionContext {
|
|
29
26
|
/**
|
|
30
27
|
* Run `fn` inside a transaction context scope.
|
|
31
28
|
*
|
|
@@ -95,7 +92,7 @@ class TransactionContext {
|
|
|
95
92
|
static setActiveTransaction(adapterInstanceName, tx) {
|
|
96
93
|
const store = als.getStore();
|
|
97
94
|
if (store === undefined) {
|
|
98
|
-
throw new
|
|
95
|
+
throw new IllegalTransactionStateError('Cannot set active transaction outside of TransactionContext.run()');
|
|
99
96
|
}
|
|
100
97
|
store.activeTransactions.set(adapterInstanceName, tx);
|
|
101
98
|
}
|
|
@@ -108,5 +105,4 @@ class TransactionContext {
|
|
|
108
105
|
als.getStore()?.activeTransactions.delete(adapterInstanceName);
|
|
109
106
|
}
|
|
110
107
|
}
|
|
111
|
-
exports.TransactionContext = TransactionContext;
|
|
112
108
|
//# sourceMappingURL=transaction.context.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.context.js","sourceRoot":"","sources":["../../src/context/transaction.context.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"transaction.context.js","sourceRoot":"","sources":["../../src/context/transaction.context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAwDlE,MAAM,GAAG,GAAG,IAAI,iBAAiB,EAA2B,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,OAAO,kBAAkB;IAC7B;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,GAAG,CAAI,aAAqB,EAAE,EAAoB;QACvD,IAAI,GAAG,CAAC,QAAQ,EAAE,KAAK,SAAS,EAAE,CAAC;YACjC,OAAO,EAAE,EAAE,CAAC;QACd,CAAC;QACD,MAAM,KAAK,GAA4B;YACrC,kBAAkB,EAAE,IAAI,GAAG,EAA6B;YACxD,aAAa;YACb,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC;QACF,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,iFAAiF;IACjF,MAAM,CAAC,QAAQ;QACb,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC;IAED,4FAA4F;IAC5F,MAAM,CAAC,oBAAoB,CAAC,mBAA2B;QACrD,OAAO,GAAG,CAAC,QAAQ,EAAE,EAAE,kBAAkB,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACrE,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,MAAM,CAAC,gCAAgC,CAAC,UAAkB;QACxD,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC7B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,kBAAkB,CAAC,MAAM,EAAE,EAAE,CAAC;YACnD,IAAI,EAAE,CAAC,mBAAmB,KAAK,UAAU,EAAE,CAAC;gBAC1C,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,oBAAoB,CAAC,mBAA2B,EAAE,EAAqB;QAC5E,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC7B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,IAAI,4BAA4B,CACpC,mEAAmE,CACpE,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;IACxD,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,uBAAuB,CAAC,mBAA2B;QACxD,GAAG,CAAC,QAAQ,EAAE,EAAE,kBAAkB,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IACjE,CAAC;CACF"}
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const common_1 = require("@nestjs/common");
|
|
5
|
-
const constants_1 = require("../tokens/constants");
|
|
6
|
-
const token_utils_1 = require("../tokens/token-utils");
|
|
1
|
+
import { Inject } from '@nestjs/common';
|
|
2
|
+
import { DEFAULT_DATA_SOURCE_NAME } from '../tokens/constants.js';
|
|
3
|
+
import { getTransactionContextToken, getTransactionManagerToken, getTransactionalAdapterToken, } from '../tokens/token-utils.js';
|
|
7
4
|
/**
|
|
8
5
|
* Inject the per-dataSource `TransactionManager`. Sugar over
|
|
9
6
|
* `@Inject(getTransactionManagerToken(dataSource))` for IDE
|
|
@@ -26,20 +23,17 @@ const token_utils_1 = require("../tokens/token-utils");
|
|
|
26
23
|
* }
|
|
27
24
|
* ```
|
|
28
25
|
*/
|
|
29
|
-
const InjectTransactionManager = (dataSource =
|
|
30
|
-
exports.InjectTransactionManager = InjectTransactionManager;
|
|
26
|
+
export const InjectTransactionManager = (dataSource = DEFAULT_DATA_SOURCE_NAME) => Inject(getTransactionManagerToken(dataSource));
|
|
31
27
|
/**
|
|
32
28
|
* Inject the per-dataSource `TransactionContext`. See
|
|
33
29
|
* {@link InjectTransactionManager} for ergonomics.
|
|
34
30
|
*/
|
|
35
|
-
const InjectTransactionContext = (dataSource =
|
|
36
|
-
exports.InjectTransactionContext = InjectTransactionContext;
|
|
31
|
+
export const InjectTransactionContext = (dataSource = DEFAULT_DATA_SOURCE_NAME) => Inject(getTransactionContextToken(dataSource));
|
|
37
32
|
/**
|
|
38
33
|
* Inject the per-dataSource `TransactionAdapter` instance. Useful
|
|
39
34
|
* for advanced consumers that need to call adapter-specific methods
|
|
40
35
|
* not exposed through `TransactionManager`. See
|
|
41
36
|
* {@link InjectTransactionManager} for ergonomics.
|
|
42
37
|
*/
|
|
43
|
-
const InjectTransactionalAdapter = (dataSource =
|
|
44
|
-
exports.InjectTransactionalAdapter = InjectTransactionalAdapter;
|
|
38
|
+
export const InjectTransactionalAdapter = (dataSource = DEFAULT_DATA_SOURCE_NAME) => Inject(getTransactionalAdapterToken(dataSource));
|
|
45
39
|
//# sourceMappingURL=inject-decorators.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inject-decorators.js","sourceRoot":"","sources":["../../src/decorators/inject-decorators.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"inject-decorators.js","sourceRoot":"","sources":["../../src/decorators/inject-decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,4BAA4B,GAC7B,MAAM,0BAA0B,CAAC;AAElC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,aAAqB,wBAAwB,EACzB,EAAE,CAAC,MAAM,CAAC,0BAA0B,CAAC,UAAU,CAAC,CAAC,CAAC;AAExE;;;GAGG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,aAAqB,wBAAwB,EACzB,EAAE,CAAC,MAAM,CAAC,0BAA0B,CAAC,UAAU,CAAC,CAAC,CAAC;AAExE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,aAAqB,wBAAwB,EACzB,EAAE,CAAC,MAAM,CAAC,4BAA4B,CAAC,UAAU,CAAC,CAAC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ExtendedTransactionOptions } from '../types/transaction-options';
|
|
1
|
+
import type { ExtendedTransactionOptions } from '../types/transaction-options.js';
|
|
2
2
|
/**
|
|
3
3
|
* Metadata key under which {@link Transactional} stores its options on a
|
|
4
4
|
* target (a method's function object or a class constructor). Exposed for
|
|
@@ -1,16 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TransactionalOn = exports.ReadOnly = exports.TRANSACTIONAL_METADATA = void 0;
|
|
4
|
-
exports.Transactional = Transactional;
|
|
5
|
-
exports.getTransactionalMetadata = getTransactionalMetadata;
|
|
6
|
-
const propagation_1 = require("../types/propagation");
|
|
1
|
+
import { PropagationMode } from '../types/propagation.js';
|
|
7
2
|
/**
|
|
8
3
|
* Metadata key under which {@link Transactional} stores its options on a
|
|
9
4
|
* target (a method's function object or a class constructor). Exposed for
|
|
10
5
|
* advanced introspection; most code should use
|
|
11
6
|
* {@link getTransactionalMetadata}.
|
|
12
7
|
*/
|
|
13
|
-
|
|
8
|
+
export const TRANSACTIONAL_METADATA = Symbol('TRANSACTIONAL_METADATA');
|
|
14
9
|
/**
|
|
15
10
|
* Mark a method or a class as transactional.
|
|
16
11
|
*
|
|
@@ -30,18 +25,18 @@ exports.TRANSACTIONAL_METADATA = Symbol('TRANSACTIONAL_METADATA');
|
|
|
30
25
|
*
|
|
31
26
|
* Default propagation is {@link PropagationMode.REQUIRED}.
|
|
32
27
|
*/
|
|
33
|
-
function Transactional(options = {}) {
|
|
28
|
+
export function Transactional(options = {}) {
|
|
34
29
|
const metadata = {
|
|
35
|
-
propagation:
|
|
30
|
+
propagation: PropagationMode.REQUIRED,
|
|
36
31
|
...options,
|
|
37
32
|
};
|
|
38
33
|
const decorator = (target, _propertyKey, descriptor) => {
|
|
39
34
|
const methodTarget = descriptor?.value;
|
|
40
35
|
if (typeof methodTarget === 'function') {
|
|
41
|
-
Reflect.defineMetadata(
|
|
36
|
+
Reflect.defineMetadata(TRANSACTIONAL_METADATA, metadata, methodTarget);
|
|
42
37
|
}
|
|
43
38
|
else {
|
|
44
|
-
Reflect.defineMetadata(
|
|
39
|
+
Reflect.defineMetadata(TRANSACTIONAL_METADATA, metadata, target);
|
|
45
40
|
}
|
|
46
41
|
};
|
|
47
42
|
return decorator;
|
|
@@ -57,8 +52,7 @@ function Transactional(options = {}) {
|
|
|
57
52
|
* stray write fails at the database. Elsewhere — MySQL, SQLite, ... —
|
|
58
53
|
* the flag documents intent but nothing stops the write.
|
|
59
54
|
*/
|
|
60
|
-
const ReadOnly = (options = {}) => Transactional({ ...options, readOnly: true });
|
|
61
|
-
exports.ReadOnly = ReadOnly;
|
|
55
|
+
export const ReadOnly = (options = {}) => Transactional({ ...options, readOnly: true });
|
|
62
56
|
/**
|
|
63
57
|
* Alias for `@Transactional({ adapterInstance })`. Targets a specific
|
|
64
58
|
* adapter instance, for multi-datasource setups:
|
|
@@ -71,8 +65,7 @@ exports.ReadOnly = ReadOnly;
|
|
|
71
65
|
* The `adapterInstance` argument overrides any `adapterInstance` set in the
|
|
72
66
|
* options object.
|
|
73
67
|
*/
|
|
74
|
-
const TransactionalOn = (adapterInstance, options = {}) => Transactional({ ...options, adapterInstance });
|
|
75
|
-
exports.TransactionalOn = TransactionalOn;
|
|
68
|
+
export const TransactionalOn = (adapterInstance, options = {}) => Transactional({ ...options, adapterInstance });
|
|
76
69
|
/**
|
|
77
70
|
* Read the {@link TransactionalMetadata} stored by {@link Transactional} on
|
|
78
71
|
* `target`. Returns `undefined` when the target was not decorated.
|
|
@@ -80,8 +73,8 @@ exports.TransactionalOn = TransactionalOn;
|
|
|
80
73
|
* @param target - A class constructor (for class-level metadata) or a
|
|
81
74
|
* method function (for method-level metadata).
|
|
82
75
|
*/
|
|
83
|
-
function getTransactionalMetadata(target) {
|
|
84
|
-
const value = Reflect.getMetadata(
|
|
76
|
+
export function getTransactionalMetadata(target) {
|
|
77
|
+
const value = Reflect.getMetadata(TRANSACTIONAL_METADATA, target);
|
|
85
78
|
return value;
|
|
86
79
|
}
|
|
87
80
|
//# sourceMappingURL=transactional.decorator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactional.decorator.js","sourceRoot":"","sources":["../../src/decorators/transactional.decorator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"transactional.decorator.js","sourceRoot":"","sources":["../../src/decorators/transactional.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG1D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC,wBAAwB,CAAC,CAAC;AAUvE;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,aAAa,CAC3B,UAA0C,EAAE;IAE5C,MAAM,QAAQ,GAA0B;QACtC,WAAW,EAAE,eAAe,CAAC,QAAQ;QACrC,GAAG,OAAO;KACX,CAAC;IAEF,MAAM,SAAS,GAAqC,CAClD,MAAc,EACd,YAA8B,EAC9B,UAA+B,EACzB,EAAE;QACR,MAAM,YAAY,GAAY,UAAU,EAAE,KAAK,CAAC;QAChD,IAAI,OAAO,YAAY,KAAK,UAAU,EAAE,CAAC;YACvC,OAAO,CAAC,cAAc,CAAC,sBAAsB,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;QACzE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,cAAc,CAAC,sBAAsB,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACnE,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,UAA0C,EAAE,EACV,EAAE,CAAC,aAAa,CAAC,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAErF;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,eAAuB,EACvB,UAA0C,EAAE,EACV,EAAE,CAAC,aAAa,CAAC,EAAE,GAAG,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;AAEtF;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAc;IACrD,MAAM,KAAK,GAAY,OAAO,CAAC,WAAW,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAC;IAC3E,OAAO,KAA0C,CAAC;AACpD,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
export * from './types/propagation';
|
|
2
|
-
export * from './types/isolation';
|
|
3
|
-
export * from './types/transaction-handle';
|
|
4
|
-
export * from './types/transaction-options';
|
|
5
|
-
export * from './types/transaction-adapter';
|
|
6
|
-
export * from './types/domain-event';
|
|
7
|
-
export * from './types/errors';
|
|
8
|
-
export * from './context/transaction.context';
|
|
9
|
-
export * from './context/transaction-context-view';
|
|
10
|
-
export * from './manager/adapter.registry';
|
|
11
|
-
export * from './manager/transaction.manager';
|
|
12
|
-
export * from './decorators/transactional.decorator';
|
|
13
|
-
export * from './decorators/inject-decorators';
|
|
14
|
-
export * from './tokens';
|
|
15
|
-
export * from './interceptor/transactional.interceptor';
|
|
16
|
-
export * from './bootstrap/transactional-methods.bootstrap';
|
|
17
|
-
export * from './module/transactional.module';
|
|
18
|
-
export * from './observability/transaction-observer';
|
|
1
|
+
export * from './types/propagation.js';
|
|
2
|
+
export * from './types/isolation.js';
|
|
3
|
+
export * from './types/transaction-handle.js';
|
|
4
|
+
export * from './types/transaction-options.js';
|
|
5
|
+
export * from './types/transaction-adapter.js';
|
|
6
|
+
export * from './types/domain-event.js';
|
|
7
|
+
export * from './types/errors.js';
|
|
8
|
+
export * from './context/transaction.context.js';
|
|
9
|
+
export * from './context/transaction-context-view.js';
|
|
10
|
+
export * from './manager/adapter.registry.js';
|
|
11
|
+
export * from './manager/transaction.manager.js';
|
|
12
|
+
export * from './decorators/transactional.decorator.js';
|
|
13
|
+
export * from './decorators/inject-decorators.js';
|
|
14
|
+
export * from './tokens/index.js';
|
|
15
|
+
export * from './interceptor/transactional.interceptor.js';
|
|
16
|
+
export * from './bootstrap/transactional-methods.bootstrap.js';
|
|
17
|
+
export * from './module/transactional.module.js';
|
|
18
|
+
export * from './observability/transaction-observer.js';
|
|
19
19
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js
CHANGED
|
@@ -1,35 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
__exportStar(require("./types/transaction-handle"), exports);
|
|
20
|
-
__exportStar(require("./types/transaction-options"), exports);
|
|
21
|
-
__exportStar(require("./types/transaction-adapter"), exports);
|
|
22
|
-
__exportStar(require("./types/domain-event"), exports);
|
|
23
|
-
__exportStar(require("./types/errors"), exports);
|
|
24
|
-
__exportStar(require("./context/transaction.context"), exports);
|
|
25
|
-
__exportStar(require("./context/transaction-context-view"), exports);
|
|
26
|
-
__exportStar(require("./manager/adapter.registry"), exports);
|
|
27
|
-
__exportStar(require("./manager/transaction.manager"), exports);
|
|
28
|
-
__exportStar(require("./decorators/transactional.decorator"), exports);
|
|
29
|
-
__exportStar(require("./decorators/inject-decorators"), exports);
|
|
30
|
-
__exportStar(require("./tokens"), exports);
|
|
31
|
-
__exportStar(require("./interceptor/transactional.interceptor"), exports);
|
|
32
|
-
__exportStar(require("./bootstrap/transactional-methods.bootstrap"), exports);
|
|
33
|
-
__exportStar(require("./module/transactional.module"), exports);
|
|
34
|
-
__exportStar(require("./observability/transaction-observer"), exports);
|
|
1
|
+
export * from './types/propagation.js';
|
|
2
|
+
export * from './types/isolation.js';
|
|
3
|
+
export * from './types/transaction-handle.js';
|
|
4
|
+
export * from './types/transaction-options.js';
|
|
5
|
+
export * from './types/transaction-adapter.js';
|
|
6
|
+
export * from './types/domain-event.js';
|
|
7
|
+
export * from './types/errors.js';
|
|
8
|
+
export * from './context/transaction.context.js';
|
|
9
|
+
export * from './context/transaction-context-view.js';
|
|
10
|
+
export * from './manager/adapter.registry.js';
|
|
11
|
+
export * from './manager/transaction.manager.js';
|
|
12
|
+
export * from './decorators/transactional.decorator.js';
|
|
13
|
+
export * from './decorators/inject-decorators.js';
|
|
14
|
+
export * from './tokens/index.js';
|
|
15
|
+
export * from './interceptor/transactional.interceptor.js';
|
|
16
|
+
export * from './bootstrap/transactional-methods.bootstrap.js';
|
|
17
|
+
export * from './module/transactional.module.js';
|
|
18
|
+
export * from './observability/transaction-observer.js';
|
|
35
19
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAElC,cAAc,kCAAkC,CAAC;AACjD,cAAc,uCAAuC,CAAC;AACtD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AAEjD,cAAc,yCAAyC,CAAC;AACxD,cAAc,mCAAmC,CAAC;AAElD,cAAc,mBAAmB,CAAC;AAElC,cAAc,4CAA4C,CAAC;AAC3D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,kCAAkC,CAAC;AAEjD,cAAc,yCAAyC,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type CallHandler, type ExecutionContext, type NestInterceptor } from '@nestjs/common';
|
|
2
2
|
import { Reflector } from '@nestjs/core';
|
|
3
3
|
import { type Observable } from 'rxjs';
|
|
4
|
-
import { TransactionManager } from '../manager/transaction.manager';
|
|
4
|
+
import { TransactionManager } from '../manager/transaction.manager.js';
|
|
5
5
|
/**
|
|
6
6
|
* NestJS interceptor that wraps a request-boundary handler in a transaction
|
|
7
7
|
* when the handler (or its controller class) carries `@Transactional()`
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
2
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
3
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -8,13 +7,11 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
8
7
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
8
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
9
|
};
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
const transactional_decorator_1 = require("../decorators/transactional.decorator");
|
|
17
|
-
const transaction_manager_1 = require("../manager/transaction.manager");
|
|
10
|
+
import { Injectable, } from '@nestjs/common';
|
|
11
|
+
import { Reflector } from '@nestjs/core';
|
|
12
|
+
import { defer, firstValueFrom } from 'rxjs';
|
|
13
|
+
import { TRANSACTIONAL_METADATA, } from '../decorators/transactional.decorator.js';
|
|
14
|
+
import { TransactionManager } from '../manager/transaction.manager.js';
|
|
18
15
|
/**
|
|
19
16
|
* NestJS interceptor that wraps a request-boundary handler in a transaction
|
|
20
17
|
* when the handler (or its controller class) carries `@Transactional()`
|
|
@@ -40,17 +37,17 @@ let TransactionalInterceptor = class TransactionalInterceptor {
|
|
|
40
37
|
this.reflector = reflector;
|
|
41
38
|
}
|
|
42
39
|
intercept(context, next) {
|
|
43
|
-
const metadata = this.reflector.getAllAndOverride(
|
|
40
|
+
const metadata = this.reflector.getAllAndOverride(TRANSACTIONAL_METADATA, [context.getHandler(), context.getClass()]);
|
|
44
41
|
if (metadata === undefined) {
|
|
45
42
|
return next.handle();
|
|
46
43
|
}
|
|
47
|
-
return
|
|
44
|
+
return defer(() => this.manager.run(metadata, () => firstValueFrom(next.handle())));
|
|
48
45
|
}
|
|
49
46
|
};
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
(
|
|
53
|
-
|
|
54
|
-
core_1.Reflector])
|
|
47
|
+
TransactionalInterceptor = __decorate([
|
|
48
|
+
Injectable(),
|
|
49
|
+
__metadata("design:paramtypes", [TransactionManager,
|
|
50
|
+
Reflector])
|
|
55
51
|
], TransactionalInterceptor);
|
|
52
|
+
export { TransactionalInterceptor };
|
|
56
53
|
//# sourceMappingURL=transactional.interceptor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactional.interceptor.js","sourceRoot":"","sources":["../../src/interceptor/transactional.interceptor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"transactional.interceptor.js","sourceRoot":"","sources":["../../src/interceptor/transactional.interceptor.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAGL,UAAU,GAEX,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAmB,KAAK,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAE9D,OAAO,EACL,sBAAsB,GAEvB,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAEvE;;;;;;;;;;;;;;;;GAgBG;AAEI,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IAEhB;IACA;IAFnB,YACmB,OAA2B,EAC3B,SAAoB;QADpB,YAAO,GAAP,OAAO,CAAoB;QAC3B,cAAS,GAAT,SAAS,CAAW;IACpC,CAAC;IAEJ,SAAS,CAAC,OAAyB,EAAE,IAAiB;QACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAC/C,sBAAsB,EACtB,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAC3C,CAAC;QAEF,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,CAAC;QAED,OAAO,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IACtF,CAAC;CACF,CAAA;AAlBY,wBAAwB;IADpC,UAAU,EAAE;qCAGiB,kBAAkB;QAChB,SAAS;GAH5B,wBAAwB,CAkBpC"}
|
package/dist/internal/markers.js
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.WRAPPED_MARKER = void 0;
|
|
4
1
|
/**
|
|
5
2
|
* Identity marker placed via `Reflect.defineMetadata` on methods that have
|
|
6
3
|
* been wrapped by one of the coordinated wrapping mechanisms described in
|
|
@@ -14,5 +11,5 @@ exports.WRAPPED_MARKER = void 0;
|
|
|
14
11
|
* Internal: not re-exported from the public API. The three wrapping
|
|
15
12
|
* mechanisms are the only legitimate users.
|
|
16
13
|
*/
|
|
17
|
-
|
|
14
|
+
export const WRAPPED_MARKER = Symbol.for('@nestjs-transactional/wrapped');
|
|
18
15
|
//# sourceMappingURL=markers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markers.js","sourceRoot":"","sources":["../../src/internal/markers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"markers.js","sourceRoot":"","sources":["../../src/internal/markers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { TransactionAdapter } from '../types/transaction-adapter';
|
|
1
|
+
import type { TransactionAdapter } from '../types/transaction-adapter.js';
|
|
2
2
|
/**
|
|
3
3
|
* A single entry in the {@link AdapterRegistry}: an adapter instance bound to
|
|
4
4
|
* its type name and instance name. Used as both the input shape of
|