@ts-transactional/core 0.1.5 → 0.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.
@@ -4,11 +4,14 @@ export type TransactionAdapter<SourceClass extends DataSourceClass, Transaction
4
4
  beginTransaction: (dataSource: InstanceType<SourceClass>, transactionArgs: TransactionalBeginTransactionArgs) => Promise<Transaction>;
5
5
  commit: (transaction: Transaction) => Promise<void>;
6
6
  rollback: (transaction: Transaction) => Promise<void>;
7
+ beginNested?: (dataSource: InstanceType<SourceClass>, parentTransaction: Transaction, transactionArgs: TransactionalBeginTransactionArgs) => Promise<Transaction>;
8
+ releaseNested?: (transaction: Transaction) => Promise<void>;
9
+ rollbackNested?: (transaction: Transaction) => Promise<void>;
7
10
  };
8
11
  export declare class TransactionAdapterFactory {
9
12
  static create<SourceClass extends DataSourceClass, Transaction>(adapter: TransactionAdapter<SourceClass, Transaction> & {
10
- initializer?: () => void;
13
+ initializer?: () => void | Promise<void>;
11
14
  }): TransactionAdapter<SourceClass, Transaction> & {
12
- initializer?: () => void;
15
+ initializer?: () => void | Promise<void>;
13
16
  };
14
17
  }
@@ -3,7 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TransactionAdapterFactory = void 0;
4
4
  class TransactionAdapterFactory {
5
5
  static create(adapter) {
6
- adapter?.initializer?.();
6
+ const ret = adapter?.initializer?.();
7
+ if (ret && typeof ret.then === 'function') {
8
+ void ret.catch(() => { });
9
+ }
7
10
  return adapter;
8
11
  }
9
12
  }
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.adapter.js","sourceRoot":"","sources":["../../src/adapters/transaction.adapter.ts"],"names":[],"mappings":";;;AAYA,MAAa,yBAAyB;IACpC,MAAM,CAAC,MAAM,CACX,OAEC;QAED,OAAO,EAAE,WAAW,EAAE,EAAE,CAAA;QACxB,OAAO,OAAO,CAAA;IAChB,CAAC;CACF;AATD,8DASC"}
1
+ {"version":3,"file":"transaction.adapter.js","sourceRoot":"","sources":["../../src/adapters/transaction.adapter.ts"],"names":[],"mappings":";;;AA2BA,MAAa,yBAAyB;IACpC,MAAM,CAAC,MAAM,CACX,OAEC;QAED,MAAM,GAAG,GAAG,OAAO,EAAE,WAAW,EAAE,EAAE,CAAA;QACpC,IAAI,GAAG,IAAI,OAAQ,GAAqB,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAE7D,KAAM,GAAqB,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QAC7C,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;CACF;AAbD,8DAaC"}
@@ -1,4 +1,4 @@
1
- import { DataSourceObject, TransactionalOptions, TransactionalStore } from '../types/transaction.types';
1
+ import { DataSourceObject, TransactionLifecycleCallback, TransactionalOptions, TransactionalStore } from '../types/transaction.types';
2
2
  export declare class TransactionManager {
3
3
  private static defaultTransactionOptions;
4
4
  private static asyncLocalStorage;
@@ -12,6 +12,8 @@ export declare class TransactionManager {
12
12
  static addDataSource(dataSource: DataSourceObject): void;
13
13
  static getDataSource(dataSourceKey?: any): DataSourceObject;
14
14
  static getAsyncLocalStorageTransactionStore(): TransactionalStore;
15
+ static registerAfterCommit(callback: TransactionLifecycleCallback): void;
16
+ static registerAfterRollback(callback: TransactionLifecycleCallback): void;
15
17
  static exec<const F extends (...args: any[]) => Promise<any>>(method: F, transactionOptions?: TransactionalOptions): Promise<any>;
16
18
  static execTransaction({ transactionOptions, targetMethodInfo, }: {
17
19
  transactionOptions?: TransactionalOptions;
@@ -4,6 +4,11 @@ exports.TransactionManager = void 0;
4
4
  const async_hooks_1 = require("async_hooks");
5
5
  const transaction_errors_1 = require("../errors/transaction.errors");
6
6
  const transaction_types_1 = require("../types/transaction.types");
7
+ const debug = (...args) => {
8
+ if (process.env.TS_TRANSACTIONAL_DEBUG === '1') {
9
+ console.log(...args);
10
+ }
11
+ };
7
12
  class TransactionManager {
8
13
  static defaultTransactionOptions = {
9
14
  propagation: transaction_types_1.Propagation.REQUIRED,
@@ -37,6 +42,14 @@ class TransactionManager {
37
42
  }
38
43
  static addDataSource(dataSource) {
39
44
  dataSource.key ??= this.getDataSourceKey(dataSource.key || dataSource.source);
45
+ if (this.dataSources.has(dataSource.key)) {
46
+ const existing = this.dataSources.get(dataSource.key);
47
+ if (existing?.source === dataSource.source) {
48
+ debug('addDataSource: skip duplicate', dataSource.key);
49
+ return;
50
+ }
51
+ debug('addDataSource: overwrite different source for same key', dataSource.key);
52
+ }
40
53
  this.dataSources.set(dataSource.key, dataSource);
41
54
  if (!this.primaryDataSource || dataSource.primary) {
42
55
  this.primaryDataSource = dataSource;
@@ -54,8 +67,23 @@ class TransactionManager {
54
67
  return dataSource;
55
68
  }
56
69
  static getAsyncLocalStorageTransactionStore() {
57
- const store = Object.assign({}, this.asyncLocalStorage.getStore() || {});
58
- return store;
70
+ return Object.assign({}, this.asyncLocalStorage.getStore() || {});
71
+ }
72
+ static registerAfterCommit(callback) {
73
+ const raw = this.asyncLocalStorage.getStore();
74
+ if (!raw || !raw.transaction) {
75
+ void Promise.resolve().then(callback);
76
+ return;
77
+ }
78
+ raw.afterCommitCallbacks ??= [];
79
+ raw.afterCommitCallbacks.push(callback);
80
+ }
81
+ static registerAfterRollback(callback) {
82
+ const raw = this.asyncLocalStorage.getStore();
83
+ if (!raw || !raw.transaction)
84
+ return;
85
+ raw.afterRollbackCallbacks ??= [];
86
+ raw.afterRollbackCallbacks.push(callback);
59
87
  }
60
88
  static async exec(method, transactionOptions) {
61
89
  return this.execTransaction({
@@ -66,78 +94,271 @@ class TransactionManager {
66
94
  });
67
95
  }
68
96
  static async execTransaction({ transactionOptions = {}, targetMethodInfo, }) {
69
- const { propagation = this.defaultTransactionOptions.propagation || transaction_types_1.Propagation.SUPPORTS, readOnly, autocommit, isolationLevel, dataSourceKey, } = transactionOptions;
70
- const store = TransactionManager.getAsyncLocalStorageTransactionStore();
97
+ const { propagation = this.defaultTransactionOptions.propagation || transaction_types_1.Propagation.SUPPORTS, readOnly, autocommit, isolationLevel, dataSourceKey, timeout, rollbackFor, noRollbackFor, } = transactionOptions;
98
+ const store = Object.assign({}, this.asyncLocalStorage.getStore() || {});
71
99
  const dataSource = TransactionManager.getDataSource(dataSourceKey);
72
100
  const transactionAdapter = dataSource.transactionAdapter;
73
- let isNewTransaction = false;
74
101
  const beforeTransaction = store?.transaction;
75
- const beginTransaction = async () => {
102
+ const beforeTransactionID = store?.transactionID;
103
+ const beforeAdapter = store?.adapter;
104
+ const beforeAfterCommit = store?.afterCommitCallbacks;
105
+ const beforeAfterRollback = store?.afterRollbackCallbacks;
106
+ let mode = 'noTransaction';
107
+ const beginTopLevel = async () => {
76
108
  store.transactionID = Date.now() + '';
77
- console.log('beginTransaction', store.transactionID);
109
+ debug('beginTransaction', store.transactionID);
78
110
  store.adapter = transactionAdapter;
79
111
  store.transaction = await transactionAdapter.beginTransaction(dataSource.source, {
80
112
  isolationLevel,
113
+ autocommit,
114
+ readOnly,
81
115
  });
82
- isNewTransaction = true;
116
+ store.afterCommitCallbacks = [];
117
+ store.afterRollbackCallbacks = [];
118
+ mode = 'newTopLevel';
119
+ };
120
+ const beginNested = async () => {
121
+ if (!transactionAdapter.beginNested) {
122
+ throw new transaction_errors_1.TransactionPropagationError({
123
+ message: 'NESTED propagation requires adapter.beginNested support',
124
+ });
125
+ }
126
+ store.transactionID = (beforeTransactionID || '') + '/sp-' + Date.now();
127
+ debug('beginNested', store.transactionID);
128
+ store.adapter = transactionAdapter;
129
+ store.transaction = await transactionAdapter.beginNested(dataSource.source, beforeTransaction, {
130
+ isolationLevel,
131
+ autocommit,
132
+ readOnly,
133
+ });
134
+ store.afterCommitCallbacks = [];
135
+ store.afterRollbackCallbacks = [];
136
+ mode = 'nestedSavepoint';
83
137
  };
84
138
  switch (propagation) {
85
139
  case transaction_types_1.Propagation.REQUIRED:
86
- if (!store.transaction) {
87
- await beginTransaction();
140
+ if (!beforeTransaction) {
141
+ await beginTopLevel();
142
+ }
143
+ else {
144
+ mode = 'joinExisting';
88
145
  }
89
146
  break;
90
147
  case transaction_types_1.Propagation.SUPPORTS:
91
- if (!store.transaction) {
92
- console.log('Executing without transaction');
148
+ if (beforeTransaction) {
149
+ mode = 'joinExisting';
150
+ }
151
+ else {
152
+ mode = 'noTransaction';
153
+ debug('Executing without transaction');
93
154
  }
94
155
  break;
95
156
  case transaction_types_1.Propagation.MANDATORY:
96
- if (!store.transaction) {
157
+ if (!beforeTransaction) {
97
158
  throw new transaction_errors_1.TransactionPropagationError({ message: 'No existing transaction found for propagation MANDATORY' });
98
159
  }
160
+ mode = 'joinExisting';
99
161
  break;
100
162
  case transaction_types_1.Propagation.REQUIRES_NEW:
101
- await beginTransaction();
163
+ store.transaction = undefined;
164
+ store.transactionID = undefined;
165
+ store.adapter = undefined;
166
+ await beginTopLevel();
102
167
  break;
103
168
  case transaction_types_1.Propagation.NOT_SUPPORTED:
104
- if (store.transaction) {
105
- store.transaction = null;
106
- console.log('Suspending current transaction');
169
+ if (beforeTransaction) {
170
+ store.transaction = undefined;
171
+ store.transactionID = undefined;
172
+ store.adapter = undefined;
173
+ mode = 'suspended';
174
+ debug('Suspending current transaction');
175
+ }
176
+ else {
177
+ mode = 'noTransaction';
107
178
  }
108
179
  break;
109
180
  case transaction_types_1.Propagation.NEVER:
110
- if (store.transaction) {
181
+ if (beforeTransaction) {
111
182
  throw new transaction_errors_1.TransactionPropagationError({ message: 'Transaction present for propagation NEVER' });
112
183
  }
184
+ mode = 'noTransaction';
185
+ break;
186
+ case transaction_types_1.Propagation.NESTED:
187
+ if (!beforeTransaction) {
188
+ await beginTopLevel();
189
+ }
190
+ else {
191
+ await beginNested();
192
+ }
113
193
  break;
114
194
  default:
115
195
  throw new transaction_errors_1.TransactionPropagationError({ message: `Unsupported propagation type: ${propagation}` });
116
196
  }
117
197
  return this.asyncLocalStorage.run(store, async () => {
118
- try {
119
- const result = targetMethodInfo.this
198
+ const currentTransaction = store.transaction;
199
+ const currentAdapter = store.adapter;
200
+ const currentCallbacks = {
201
+ afterCommit: store.afterCommitCallbacks,
202
+ afterRollback: store.afterRollbackCallbacks,
203
+ };
204
+ const stackAnchor = new Error('TransactionManager.execTransaction');
205
+ const invoke = async () => {
206
+ return targetMethodInfo.this
120
207
  ? await targetMethodInfo.method.apply(targetMethodInfo.this, targetMethodInfo.methodArgs || [])
121
208
  : await targetMethodInfo.method(...(targetMethodInfo.methodArgs || []));
122
- if (isNewTransaction) {
123
- console.log('commit', store.transactionID, !!store.transaction);
124
- await store.adapter?.commit(store.transaction);
209
+ };
210
+ const runWithTimeout = async () => {
211
+ if (!timeout || timeout <= 0)
212
+ return invoke();
213
+ let timer;
214
+ try {
215
+ return await Promise.race([
216
+ invoke(),
217
+ new Promise((_, reject) => {
218
+ timer = setTimeout(() => reject(new transaction_types_1.TransactionTimeoutError(timeout)), timeout);
219
+ }),
220
+ ]);
221
+ }
222
+ finally {
223
+ if (timer)
224
+ clearTimeout(timer);
225
+ }
226
+ };
227
+ try {
228
+ const result = await runWithTimeout();
229
+ if (mode === 'newTopLevel') {
230
+ debug('commit', store.transactionID, !!store.transaction);
125
231
  store.transaction = beforeTransaction;
126
- console.log('endTransaction', store.transactionID, !!store.transaction);
232
+ store.transactionID = beforeTransactionID;
233
+ store.adapter = beforeAdapter;
234
+ store.afterCommitCallbacks = beforeAfterCommit;
235
+ store.afterRollbackCallbacks = beforeAfterRollback;
236
+ await currentAdapter?.commit(currentTransaction);
237
+ await fireCallbacks(currentCallbacks.afterCommit);
238
+ }
239
+ else if (mode === 'nestedSavepoint') {
240
+ debug('release savepoint', store.transactionID);
241
+ store.transaction = beforeTransaction;
242
+ store.transactionID = beforeTransactionID;
243
+ store.adapter = beforeAdapter;
244
+ store.afterCommitCallbacks = beforeAfterCommit;
245
+ store.afterRollbackCallbacks = beforeAfterRollback;
246
+ if (currentAdapter?.releaseNested) {
247
+ await currentAdapter.releaseNested(currentTransaction);
248
+ }
249
+ if (currentCallbacks.afterCommit && currentCallbacks.afterCommit.length > 0) {
250
+ ;
251
+ (beforeAfterCommit ?? (store.afterCommitCallbacks = [])).push(...currentCallbacks.afterCommit);
252
+ }
127
253
  }
128
254
  return result;
129
255
  }
130
256
  catch (error) {
131
- if (isNewTransaction) {
132
- console.log('rollback', store.transactionID, !!store.transaction);
133
- await store.adapter?.rollback(store.transaction);
257
+ const shouldRollback = decideRollback(error, rollbackFor, noRollbackFor);
258
+ if (mode === 'newTopLevel') {
259
+ store.transaction = beforeTransaction;
260
+ store.transactionID = beforeTransactionID;
261
+ store.adapter = beforeAdapter;
262
+ store.afterCommitCallbacks = beforeAfterCommit;
263
+ store.afterRollbackCallbacks = beforeAfterRollback;
264
+ if (shouldRollback) {
265
+ debug('rollback', store.transactionID, !!store.transaction);
266
+ await currentAdapter?.rollback(currentTransaction);
267
+ await fireCallbacks(currentCallbacks.afterRollback);
268
+ }
269
+ else {
270
+ debug('commit (noRollbackFor matched)', store.transactionID);
271
+ await currentAdapter?.commit(currentTransaction);
272
+ await fireCallbacks(currentCallbacks.afterCommit);
273
+ }
274
+ }
275
+ else if (mode === 'nestedSavepoint') {
134
276
  store.transaction = beforeTransaction;
135
- console.log('endTransaction', store.transactionID, !!store.transaction);
277
+ store.transactionID = beforeTransactionID;
278
+ store.adapter = beforeAdapter;
279
+ store.afterCommitCallbacks = beforeAfterCommit;
280
+ store.afterRollbackCallbacks = beforeAfterRollback;
281
+ if (shouldRollback) {
282
+ debug('rollback savepoint', store.transactionID);
283
+ if (currentAdapter?.rollbackNested) {
284
+ await currentAdapter.rollbackNested(currentTransaction);
285
+ }
286
+ await fireCallbacks(currentCallbacks.afterRollback);
287
+ }
288
+ else {
289
+ debug('release savepoint (noRollbackFor matched)', store.transactionID);
290
+ if (currentAdapter?.releaseNested) {
291
+ await currentAdapter.releaseNested(currentTransaction);
292
+ }
293
+ if (currentCallbacks.afterCommit && currentCallbacks.afterCommit.length > 0) {
294
+ ;
295
+ (beforeAfterCommit ?? (store.afterCommitCallbacks = [])).push(...currentCallbacks.afterCommit);
296
+ }
297
+ }
136
298
  }
299
+ attachAnchor(error, stackAnchor);
137
300
  throw error;
138
301
  }
302
+ finally {
303
+ if (mode === 'newTopLevel' || mode === 'nestedSavepoint') {
304
+ debug('endTransaction', store.transactionID, !!beforeTransaction);
305
+ }
306
+ }
139
307
  });
140
308
  }
141
309
  }
142
310
  exports.TransactionManager = TransactionManager;
311
+ const fireCallbacks = async (callbacks) => {
312
+ if (!callbacks || callbacks.length === 0)
313
+ return;
314
+ for (const cb of callbacks) {
315
+ try {
316
+ await cb();
317
+ }
318
+ catch (e) {
319
+ debug('lifecycle callback error', e);
320
+ }
321
+ }
322
+ };
323
+ const matchesAny = (error, list) => {
324
+ if (!list || list.length === 0)
325
+ return false;
326
+ for (const entry of list) {
327
+ if (typeof entry === 'function') {
328
+ const looksLikeClass = entry.prototype && entry.prototype instanceof Error;
329
+ if (looksLikeClass) {
330
+ if (error instanceof entry)
331
+ return true;
332
+ }
333
+ else {
334
+ try {
335
+ if (entry(error))
336
+ return true;
337
+ }
338
+ catch {
339
+ }
340
+ }
341
+ }
342
+ }
343
+ return false;
344
+ };
345
+ const decideRollback = (error, rollbackFor, noRollbackFor) => {
346
+ if (matchesAny(error, noRollbackFor))
347
+ return false;
348
+ if (rollbackFor && rollbackFor.length > 0) {
349
+ return matchesAny(error, rollbackFor);
350
+ }
351
+ return true;
352
+ };
353
+ const attachAnchor = (error, anchor) => {
354
+ if (!error || typeof error !== 'object')
355
+ return;
356
+ const e = error;
357
+ if (e.__tsTransactionalAnchored)
358
+ return;
359
+ if (typeof e.stack === 'string' && typeof anchor.stack === 'string') {
360
+ e.stack += '\n --- via ' + anchor.stack.split('\n').slice(1).join('\n').trim();
361
+ }
362
+ e.__tsTransactionalAnchored = true;
363
+ };
143
364
  //# sourceMappingURL=transaction.manager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.manager.js","sourceRoot":"","sources":["../../src/manager/transaction.manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transaction.manager.js","sourceRoot":"","sources":["../../src/manager/transaction.manager.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,8 @@ export declare enum Propagation {
5
5
  MANDATORY = "MANDATORY",
6
6
  REQUIRES_NEW = "REQUIRES_NEW",
7
7
  NOT_SUPPORTED = "NOT_SUPPORTED",
8
- NEVER = "NEVER"
8
+ NEVER = "NEVER",
9
+ NESTED = "NESTED"
9
10
  }
10
11
  export declare enum ISOLATION_LEVELS {
11
12
  READ_UNCOMMITTED = "READ UNCOMMITTED",
@@ -13,12 +14,17 @@ export declare enum ISOLATION_LEVELS {
13
14
  REPEATABLE_READ = "REPEATABLE READ",
14
15
  SERIALIZABLE = "SERIALIZABLE"
15
16
  }
17
+ export type ErrorClass = new (...args: any[]) => Error;
18
+ export type RollbackPredicate = (error: unknown) => boolean;
16
19
  export interface TransactionalOptions {
17
20
  propagation?: Propagation;
18
21
  dataSourceKey?: any;
19
22
  isolationLevel?: ISOLATION_LEVELS;
20
23
  autocommit?: boolean;
21
24
  readOnly?: boolean;
25
+ timeout?: number;
26
+ rollbackFor?: ReadonlyArray<ErrorClass | RollbackPredicate>;
27
+ noRollbackFor?: ReadonlyArray<ErrorClass | RollbackPredicate>;
22
28
  }
23
29
  export type TransactionalBeginTransactionArgs = Pick<TransactionalOptions, 'isolationLevel' | 'autocommit' | 'readOnly'>;
24
30
  export type DataSourceClass = {
@@ -30,8 +36,15 @@ export type DataSourceObject<T = any> = {
30
36
  primary?: boolean;
31
37
  transactionAdapter?: TransactionAdapter<any>;
32
38
  };
39
+ export type TransactionLifecycleCallback = () => void | Promise<void>;
33
40
  export type TransactionalStore = {
34
41
  transaction?: any;
35
42
  adapter?: TransactionAdapter<any>;
36
43
  transactionID?: string;
44
+ afterCommitCallbacks?: TransactionLifecycleCallback[];
45
+ afterRollbackCallbacks?: TransactionLifecycleCallback[];
37
46
  };
47
+ export declare class TransactionTimeoutError extends Error {
48
+ readonly code = "TRANSACTION_TIMEOUT";
49
+ constructor(timeoutMs: number);
50
+ }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ISOLATION_LEVELS = exports.Propagation = void 0;
3
+ exports.TransactionTimeoutError = exports.ISOLATION_LEVELS = exports.Propagation = void 0;
4
4
  var Propagation;
5
5
  (function (Propagation) {
6
6
  Propagation["REQUIRED"] = "REQUIRED";
@@ -9,6 +9,7 @@ var Propagation;
9
9
  Propagation["REQUIRES_NEW"] = "REQUIRES_NEW";
10
10
  Propagation["NOT_SUPPORTED"] = "NOT_SUPPORTED";
11
11
  Propagation["NEVER"] = "NEVER";
12
+ Propagation["NESTED"] = "NESTED";
12
13
  })(Propagation || (exports.Propagation = Propagation = {}));
13
14
  var ISOLATION_LEVELS;
14
15
  (function (ISOLATION_LEVELS) {
@@ -17,4 +18,11 @@ var ISOLATION_LEVELS;
17
18
  ISOLATION_LEVELS["REPEATABLE_READ"] = "REPEATABLE READ";
18
19
  ISOLATION_LEVELS["SERIALIZABLE"] = "SERIALIZABLE";
19
20
  })(ISOLATION_LEVELS || (exports.ISOLATION_LEVELS = ISOLATION_LEVELS = {}));
21
+ class TransactionTimeoutError extends Error {
22
+ code = 'TRANSACTION_TIMEOUT';
23
+ constructor(timeoutMs) {
24
+ super(`Transaction exceeded timeout of ${timeoutMs}ms`);
25
+ }
26
+ }
27
+ exports.TransactionTimeoutError = TransactionTimeoutError;
20
28
  //# sourceMappingURL=transaction.types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.types.js","sourceRoot":"","sources":["../../src/types/transaction.types.ts"],"names":[],"mappings":";;;AAEA,IAAY,WAQX;AARD,WAAY,WAAW;IACrB,oCAAqB,CAAA;IACrB,oCAAqB,CAAA;IACrB,sCAAuB,CAAA;IACvB,4CAA6B,CAAA;IAC7B,8CAA+B,CAAA;IAC/B,8BAAe,CAAA;AAEjB,CAAC,EARW,WAAW,2BAAX,WAAW,QAQtB;AAED,IAAY,gBAKX;AALD,WAAY,gBAAgB;IAC1B,yDAAqC,CAAA;IACrC,qDAAiC,CAAA;IACjC,uDAAmC,CAAA;IACnC,iDAA6B,CAAA;AAC/B,CAAC,EALW,gBAAgB,gCAAhB,gBAAgB,QAK3B"}
1
+ {"version":3,"file":"transaction.types.js","sourceRoot":"","sources":["../../src/types/transaction.types.ts"],"names":[],"mappings":";;;AAEA,IAAY,WAQX;AARD,WAAY,WAAW;IACrB,oCAAqB,CAAA;IACrB,oCAAqB,CAAA;IACrB,sCAAuB,CAAA;IACvB,4CAA6B,CAAA;IAC7B,8CAA+B,CAAA;IAC/B,8BAAe,CAAA;IACf,gCAAiB,CAAA;AACnB,CAAC,EARW,WAAW,2BAAX,WAAW,QAQtB;AAED,IAAY,gBAKX;AALD,WAAY,gBAAgB;IAC1B,yDAAqC,CAAA;IACrC,qDAAiC,CAAA;IACjC,uDAAmC,CAAA;IACnC,iDAA6B,CAAA;AAC/B,CAAC,EALW,gBAAgB,gCAAhB,gBAAgB,QAK3B;AAkDD,MAAa,uBAAwB,SAAQ,KAAK;IACvC,IAAI,GAAG,qBAAqB,CAAA;IACrC,YAAY,SAAiB;QAC3B,KAAK,CAAC,mCAAmC,SAAS,IAAI,CAAC,CAAA;IACzD,CAAC;CACF;AALD,0DAKC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ts-transactional/core",
3
- "version": "0.1.5",
3
+ "version": "0.2.0",
4
4
  "description": "node.js typescript transactional library",
5
5
  "main": "./dist/index.js",
6
6
  "peerDependencies": {