@decaf-ts/transactional-decorators 0.0.4 → 0.0.5
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 +4 -4
- package/dist/esm/transactional-decorators.bundle.min.esm.js +1 -1
- package/dist/transactional-decorators.bundle.min.js +1 -1
- package/lib/Transaction.cjs +152 -3
- package/lib/Transaction.d.ts +7 -0
- package/lib/constants.cjs +9 -1
- package/lib/decorators.cjs +166 -1
- package/lib/decorators.d.ts +0 -7
- package/lib/esm/Transaction.d.ts +7 -0
- package/lib/esm/Transaction.js +148 -3
- package/lib/esm/constants.js +6 -1
- package/lib/esm/decorators.d.ts +0 -7
- package/lib/esm/decorators.js +162 -1
- package/lib/esm/index.d.ts +1 -1
- package/lib/esm/index.js +26 -1
- package/lib/esm/interfaces/TransactionLock.js +3 -0
- package/lib/esm/interfaces/index.js +3 -1
- package/lib/esm/locks/Lock.js +63 -1
- package/lib/esm/locks/SyncronousLock.js +117 -1
- package/lib/esm/locks/index.js +4 -1
- package/lib/esm/types.js +3 -0
- package/lib/esm/utils.js +15 -1
- package/lib/index.cjs +43 -1
- package/lib/index.d.ts +1 -1
- package/lib/interfaces/TransactionLock.cjs +4 -1
- package/lib/interfaces/index.cjs +19 -1
- package/lib/locks/Lock.cjs +67 -1
- package/lib/locks/SyncronousLock.cjs +121 -1
- package/lib/locks/index.cjs +20 -1
- package/lib/types.cjs +4 -1
- package/lib/utils.cjs +18 -1
- package/package.json +21 -18
package/lib/esm/decorators.js
CHANGED
|
@@ -1 +1,162 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { TransactionalKeys } from "./constants";
|
|
2
|
+
import { metadata } from "@decaf-ts/reflection";
|
|
3
|
+
import { Transaction } from "./Transaction";
|
|
4
|
+
/**
|
|
5
|
+
* @summary Sets a class Async (promise based) method as transactional
|
|
6
|
+
*
|
|
7
|
+
* @param {any[]} [data] option metadata available to the {@link TransactionLock}
|
|
8
|
+
*
|
|
9
|
+
* @function transactionalPromise
|
|
10
|
+
*
|
|
11
|
+
* @memberOf module:db-decorators.Decorators.transactions
|
|
12
|
+
*/
|
|
13
|
+
export function transactional(...data) {
|
|
14
|
+
return function (target, propertyKey, descriptor) {
|
|
15
|
+
metadata(Transaction.key(TransactionalKeys.TRANSACTIONAL), data)(target, propertyKey);
|
|
16
|
+
const originalMethod = descriptor.value;
|
|
17
|
+
const methodWrapper = function (...args) {
|
|
18
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
19
|
+
const self = this;
|
|
20
|
+
return new Promise((resolve, reject) => {
|
|
21
|
+
const cb = (err, result) => {
|
|
22
|
+
Transaction.release(err).then(() => {
|
|
23
|
+
if (err)
|
|
24
|
+
return reject(err);
|
|
25
|
+
resolve(result);
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
let transaction = args.shift();
|
|
29
|
+
if (transaction instanceof Transaction) {
|
|
30
|
+
const updatedTransaction = new Transaction(this.constructor.name, propertyKey, async () => {
|
|
31
|
+
originalMethod
|
|
32
|
+
.call(updatedTransaction.bindToTransaction(self), ...args)
|
|
33
|
+
.then(resolve)
|
|
34
|
+
.catch(reject);
|
|
35
|
+
}, data.length ? data : undefined);
|
|
36
|
+
transaction.bindTransaction(updatedTransaction);
|
|
37
|
+
transaction.fire();
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
args.unshift(transaction);
|
|
41
|
+
transaction = undefined;
|
|
42
|
+
transaction = new Transaction(this.constructor.name, propertyKey, () => {
|
|
43
|
+
originalMethod
|
|
44
|
+
.call(transaction.bindToTransaction(self), ...args)
|
|
45
|
+
.then((result) => cb(undefined, result))
|
|
46
|
+
.catch(cb);
|
|
47
|
+
}, data.length ? data : undefined);
|
|
48
|
+
Transaction.submit(transaction);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
};
|
|
52
|
+
Object.defineProperty(methodWrapper, "name", {
|
|
53
|
+
value: propertyKey,
|
|
54
|
+
});
|
|
55
|
+
descriptor.value = methodWrapper;
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
//
|
|
59
|
+
// /**
|
|
60
|
+
// * @summary Sets a class Async method as transactional
|
|
61
|
+
// *
|
|
62
|
+
// * @param {any[]} [metadata] option metadata available to the {@link TransactionLock}
|
|
63
|
+
// *
|
|
64
|
+
// * @function transactionalAsync
|
|
65
|
+
// *
|
|
66
|
+
// * @memberOf module:db-decorators.Decorators.transactions
|
|
67
|
+
// */
|
|
68
|
+
// export function transactionalAsync(...metadata: any[]) {
|
|
69
|
+
// return function (
|
|
70
|
+
// target: any,
|
|
71
|
+
// propertyKey: string,
|
|
72
|
+
// descriptor: PropertyDescriptor,
|
|
73
|
+
// ) {
|
|
74
|
+
// metadasta(getTransactionalKey(TransactionalKeys.TRANSACTIONAL))
|
|
75
|
+
// Reflect.defineMetadata(
|
|
76
|
+
// ,
|
|
77
|
+
// {
|
|
78
|
+
// type: "async",
|
|
79
|
+
// metadata: metadata.length ? metadata : undefined,
|
|
80
|
+
// } as TransactionalMetadata,
|
|
81
|
+
// target,
|
|
82
|
+
// propertyKey,
|
|
83
|
+
// );
|
|
84
|
+
//
|
|
85
|
+
// const originalMethod = descriptor.value;
|
|
86
|
+
//
|
|
87
|
+
// const methodWrapper = function (this: any, ...args: any[]) {
|
|
88
|
+
// const callback: Callback = args.pop();
|
|
89
|
+
// if (!callback || typeof callback !== "function")
|
|
90
|
+
// throw new CriticalError(`Missing Callback`);
|
|
91
|
+
//
|
|
92
|
+
// const cb = (err?: Err, ...args: any[]) => {
|
|
93
|
+
// Transaction.release(err).then((_) => callback(err, ...args));
|
|
94
|
+
// };
|
|
95
|
+
//
|
|
96
|
+
// const self = this;
|
|
97
|
+
//
|
|
98
|
+
// let transaction = args.shift();
|
|
99
|
+
// if (transaction instanceof Transaction) {
|
|
100
|
+
// const updatedTransaction: Transaction = new Transaction(
|
|
101
|
+
// this.constructor.name,
|
|
102
|
+
// propertyKey,
|
|
103
|
+
// () => {
|
|
104
|
+
// try {
|
|
105
|
+
// return originalMethod.call(
|
|
106
|
+
// updatedTransaction.bindToTransaction(self),
|
|
107
|
+
// ...args,
|
|
108
|
+
// callback,
|
|
109
|
+
// );
|
|
110
|
+
// } catch (e: any) {
|
|
111
|
+
// return callback(e);
|
|
112
|
+
// }
|
|
113
|
+
// },
|
|
114
|
+
// metadata.length ? metadata : undefined,
|
|
115
|
+
// );
|
|
116
|
+
//
|
|
117
|
+
// transaction.bindTransaction(updatedTransaction);
|
|
118
|
+
// transaction.fire();
|
|
119
|
+
// } else {
|
|
120
|
+
// args.unshift(transaction);
|
|
121
|
+
// transaction = undefined;
|
|
122
|
+
// transaction = new Transaction(
|
|
123
|
+
// this.constructor.name,
|
|
124
|
+
// propertyKey,
|
|
125
|
+
// () => {
|
|
126
|
+
// try {
|
|
127
|
+
// return originalMethod.call(
|
|
128
|
+
// transaction.bindToTransaction(self),
|
|
129
|
+
// ...args,
|
|
130
|
+
// cb,
|
|
131
|
+
// );
|
|
132
|
+
// } catch (e: any) {
|
|
133
|
+
// return cb(e);
|
|
134
|
+
// }
|
|
135
|
+
// },
|
|
136
|
+
// metadata.length ? metadata : undefined,
|
|
137
|
+
// );
|
|
138
|
+
// Transaction.submit(transaction);
|
|
139
|
+
// }
|
|
140
|
+
// };
|
|
141
|
+
//
|
|
142
|
+
// Object.defineProperty(methodWrapper, "name", {
|
|
143
|
+
// value: propertyKey,
|
|
144
|
+
// });
|
|
145
|
+
// descriptor.value = methodWrapper;
|
|
146
|
+
// };
|
|
147
|
+
// }
|
|
148
|
+
/**
|
|
149
|
+
* @summary Util function to wrap super calls with the transaction when the super's method is also transactional
|
|
150
|
+
*
|
|
151
|
+
* @param {Function} method the super method (must be bound to the proper this), eg: super.create.bind(this)
|
|
152
|
+
* @param {any[]} args the arguments to call the method with
|
|
153
|
+
*
|
|
154
|
+
* @memberOf module:db-decorators.Transaction
|
|
155
|
+
*/
|
|
156
|
+
export function transactionalSuperCall(method, ...args) {
|
|
157
|
+
const lock = Transaction.getLock();
|
|
158
|
+
const currentTransaction = lock.currentTransaction;
|
|
159
|
+
method(currentTransaction, ...args);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,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OUIsaUJBQWlCO0FBQ2pCLHFDQUFxQztBQUNyQyxtQ0FBbUM7QUFDbkMseUNBQXlDO0FBQ3pDLG1DQUFtQztBQUNuQyx5QkFBeUI7QUFDekIsb0JBQW9CO0FBQ3BCLG9CQUFvQjtBQUNwQiw0Q0FBNEM7QUFDNUMsdURBQXVEO0FBQ3ZELDJCQUEyQjtBQUMzQixzQkFBc0I7QUFDdEIsbUJBQW1CO0FBQ25CLGlDQUFpQztBQUNqQyw4QkFBOEI7QUFDOUIsZ0JBQWdCO0FBQ2hCLGVBQWU7QUFDZixvREFBb0Q7QUFDcEQsYUFBYTtBQUNiLDJDQUEyQztBQUMzQyxVQUFVO0FBQ1YsU0FBUztBQUNULEVBQUU7QUFDRixxREFBcUQ7QUFDckQsNEJBQTRCO0FBQzVCLFVBQVU7QUFDVix3Q0FBd0M7QUFDeEMsT0FBTztBQUNQLElBQUk7QUFFSjs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUFDLE1BQVcsRUFBRSxHQUFHLElBQVM7SUFDOUQsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ25DLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ25ELE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3RDLENBQUMiLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zYWN0aW9uYWxLZXlzIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBtZXRhZGF0YSB9IGZyb20gXCJAZGVjYWYtdHMvcmVmbGVjdGlvblwiO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tIFwiLi9UcmFuc2FjdGlvblwiO1xuXG4vKipcbiAqIEBzdW1tYXJ5IFNldHMgYSBjbGFzcyBBc3luYyAocHJvbWlzZSBiYXNlZCkgbWV0aG9kIGFzIHRyYW5zYWN0aW9uYWxcbiAqXG4gKiBAcGFyYW0ge2FueVtdfSAgW2RhdGFdIG9wdGlvbiBtZXRhZGF0YSBhdmFpbGFibGUgdG8gdGhlIHtAbGluayBUcmFuc2FjdGlvbkxvY2t9XG4gKlxuICogQGZ1bmN0aW9uIHRyYW5zYWN0aW9uYWxQcm9taXNlXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTpkYi1kZWNvcmF0b3JzLkRlY29yYXRvcnMudHJhbnNhY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2FjdGlvbmFsKC4uLmRhdGE6IGFueVtdKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoXG4gICAgdGFyZ2V0OiBhbnksXG4gICAgcHJvcGVydHlLZXk6IHN0cmluZyxcbiAgICBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3JcbiAgKSB7XG4gICAgbWV0YWRhdGEoVHJhbnNhY3Rpb24ua2V5KFRyYW5zYWN0aW9uYWxLZXlzLlRSQU5TQUNUSU9OQUwpLCBkYXRhKShcbiAgICAgIHRhcmdldCxcbiAgICAgIHByb3BlcnR5S2V5XG4gICAgKTtcblxuICAgIGNvbnN0IG9yaWdpbmFsTWV0aG9kID0gZGVzY3JpcHRvci52YWx1ZTtcblxuICAgIGNvbnN0IG1ldGhvZFdyYXBwZXIgPSBmdW5jdGlvbiAodGhpczogYW55LCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8YW55PiB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcbiAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBjYiA9IChlcnI/OiBFcnJvciwgcmVzdWx0PzogYW55KSA9PiB7XG4gICAgICAgICAgVHJhbnNhY3Rpb24ucmVsZWFzZShlcnIpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIGxldCB0cmFuc2FjdGlvbiA9IGFyZ3Muc2hpZnQoKTtcbiAgICAgICAgaWYgKHRyYW5zYWN0aW9uIGluc3RhbmNlb2YgVHJhbnNhY3Rpb24pIHtcbiAgICAgICAgICBjb25zdCB1cGRhdGVkVHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKFxuICAgICAgICAgICAgdGhpcy5jb25zdHJ1Y3Rvci5uYW1lLFxuICAgICAgICAgICAgcHJvcGVydHlLZXksXG4gICAgICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgIG9yaWdpbmFsTWV0aG9kXG4gICAgICAgICAgICAgICAgLmNhbGwodXBkYXRlZFRyYW5zYWN0aW9uLmJpbmRUb1RyYW5zYWN0aW9uKHNlbGYpLCAuLi5hcmdzKVxuICAgICAgICAgICAgICAgIC50aGVuKHJlc29sdmUpXG4gICAgICAgICAgICAgICAgLmNhdGNoKHJlamVjdCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0YS5sZW5ndGggPyBkYXRhIDogdW5kZWZpbmVkXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHRyYW5zYWN0aW9uLmJpbmRUcmFuc2FjdGlvbih1cGRhdGVkVHJhbnNhY3Rpb24pO1xuICAgICAgICAgIHRyYW5zYWN0aW9uLmZpcmUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhcmdzLnVuc2hpZnQodHJhbnNhY3Rpb24pO1xuICAgICAgICAgIHRyYW5zYWN0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKFxuICAgICAgICAgICAgdGhpcy5jb25zdHJ1Y3Rvci5uYW1lLFxuICAgICAgICAgICAgcHJvcGVydHlLZXksXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgIG9yaWdpbmFsTWV0aG9kXG4gICAgICAgICAgICAgICAgLmNhbGwodHJhbnNhY3Rpb24uYmluZFRvVHJhbnNhY3Rpb24oc2VsZiksIC4uLmFyZ3MpXG4gICAgICAgICAgICAgICAgLnRoZW4oKHJlc3VsdDogYW55KSA9PiBjYih1bmRlZmluZWQsIHJlc3VsdCkpXG4gICAgICAgICAgICAgICAgLmNhdGNoKGNiKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRhLmxlbmd0aCA/IGRhdGEgOiB1bmRlZmluZWRcbiAgICAgICAgICApO1xuICAgICAgICAgIFRyYW5zYWN0aW9uLnN1Ym1pdCh0cmFuc2FjdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobWV0aG9kV3JhcHBlciwgXCJuYW1lXCIsIHtcbiAgICAgIHZhbHVlOiBwcm9wZXJ0eUtleSxcbiAgICB9KTtcbiAgICBkZXNjcmlwdG9yLnZhbHVlID0gbWV0aG9kV3JhcHBlcjtcbiAgfTtcbn1cbi8vXG4vLyAvKipcbi8vICAqIEBzdW1tYXJ5IFNldHMgYSBjbGFzcyBBc3luYyBtZXRob2QgYXMgdHJhbnNhY3Rpb25hbFxuLy8gICpcbi8vICAqIEBwYXJhbSB7YW55W119ICBbbWV0YWRhdGFdIG9wdGlvbiBtZXRhZGF0YSBhdmFpbGFibGUgdG8gdGhlIHtAbGluayBUcmFuc2FjdGlvbkxvY2t9XG4vLyAgKlxuLy8gICogQGZ1bmN0aW9uIHRyYW5zYWN0aW9uYWxBc3luY1xuLy8gICpcbi8vICAqIEBtZW1iZXJPZiBtb2R1bGU6ZGItZGVjb3JhdG9ycy5EZWNvcmF0b3JzLnRyYW5zYWN0aW9uc1xuLy8gICovXG4vLyBleHBvcnQgZnVuY3Rpb24gdHJhbnNhY3Rpb25hbEFzeW5jKC4uLm1ldGFkYXRhOiBhbnlbXSkge1xuLy8gICByZXR1cm4gZnVuY3Rpb24gKFxuLy8gICAgIHRhcmdldDogYW55LFxuLy8gICAgIHByb3BlcnR5S2V5OiBzdHJpbmcsXG4vLyAgICAgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yLFxuLy8gICApIHtcbi8vICAgICBtZXRhZGFzdGEoZ2V0VHJhbnNhY3Rpb25hbEtleShUcmFuc2FjdGlvbmFsS2V5cy5UUkFOU0FDVElPTkFMKSlcbi8vICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKFxuLy8gICAgICAgLFxuLy8gICAgICAge1xuLy8gICAgICAgICB0eXBlOiBcImFzeW5jXCIsXG4vLyAgICAgICAgIG1ldGFkYXRhOiBtZXRhZGF0YS5sZW5ndGggPyBtZXRhZGF0YSA6IHVuZGVmaW5lZCxcbi8vICAgICAgIH0gYXMgVHJhbnNhY3Rpb25hbE1ldGFkYXRhLFxuLy8gICAgICAgdGFyZ2V0LFxuLy8gICAgICAgcHJvcGVydHlLZXksXG4vLyAgICAgKTtcbi8vXG4vLyAgICAgY29uc3Qgb3JpZ2luYWxNZXRob2QgPSBkZXNjcmlwdG9yLnZhbHVlO1xuLy9cbi8vICAgICBjb25zdCBtZXRob2RXcmFwcGVyID0gZnVuY3Rpb24gKHRoaXM6IGFueSwgLi4uYXJnczogYW55W10pIHtcbi8vICAgICAgIGNvbnN0IGNhbGxiYWNrOiBDYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4vLyAgICAgICBpZiAoIWNhbGxiYWNrIHx8IHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKVxuLy8gICAgICAgICB0aHJvdyBuZXcgQ3JpdGljYWxFcnJvcihgTWlzc2luZyBDYWxsYmFja2ApO1xuLy9cbi8vICAgICAgIGNvbnN0IGNiID0gKGVycj86IEVyciwgLi4uYXJnczogYW55W10pID0+IHtcbi8vICAgICAgICAgVHJhbnNhY3Rpb24ucmVsZWFzZShlcnIpLnRoZW4oKF8pID0+IGNhbGxiYWNrKGVyciwgLi4uYXJncykpO1xuLy8gICAgICAgfTtcbi8vXG4vLyAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbi8vXG4vLyAgICAgICBsZXQgdHJhbnNhY3Rpb24gPSBhcmdzLnNoaWZ0KCk7XG4vLyAgICAgICBpZiAodHJhbnNhY3Rpb24gaW5zdGFuY2VvZiBUcmFuc2FjdGlvbikge1xuLy8gICAgICAgICBjb25zdCB1cGRhdGVkVHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKFxuLy8gICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IubmFtZSxcbi8vICAgICAgICAgICBwcm9wZXJ0eUtleSxcbi8vICAgICAgICAgICAoKSA9PiB7XG4vLyAgICAgICAgICAgICB0cnkge1xuLy8gICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxNZXRob2QuY2FsbChcbi8vICAgICAgICAgICAgICAgICB1cGRhdGVkVHJhbnNhY3Rpb24uYmluZFRvVHJhbnNhY3Rpb24oc2VsZiksXG4vLyAgICAgICAgICAgICAgICAgLi4uYXJncyxcbi8vICAgICAgICAgICAgICAgICBjYWxsYmFjayxcbi8vICAgICAgICAgICAgICAgKTtcbi8vICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuLy8gICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZSk7XG4vLyAgICAgICAgICAgICB9XG4vLyAgICAgICAgICAgfSxcbi8vICAgICAgICAgICBtZXRhZGF0YS5sZW5ndGggPyBtZXRhZGF0YSA6IHVuZGVmaW5lZCxcbi8vICAgICAgICAgKTtcbi8vXG4vLyAgICAgICAgIHRyYW5zYWN0aW9uLmJpbmRUcmFuc2FjdGlvbih1cGRhdGVkVHJhbnNhY3Rpb24pO1xuLy8gICAgICAgICB0cmFuc2FjdGlvbi5maXJlKCk7XG4vLyAgICAgICB9IGVsc2Uge1xuLy8gICAgICAgICBhcmdzLnVuc2hpZnQodHJhbnNhY3Rpb24pO1xuLy8gICAgICAgICB0cmFuc2FjdGlvbiA9IHVuZGVmaW5lZDtcbi8vICAgICAgICAgdHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24oXG4vLyAgICAgICAgICAgdGhpcy5jb25zdHJ1Y3Rvci5uYW1lLFxuLy8gICAgICAgICAgIHByb3BlcnR5S2V5LFxuLy8gICAgICAgICAgICgpID0+IHtcbi8vICAgICAgICAgICAgIHRyeSB7XG4vLyAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbE1ldGhvZC5jYWxsKFxuLy8gICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLmJpbmRUb1RyYW5zYWN0aW9uKHNlbGYpLFxuLy8gICAgICAgICAgICAgICAgIC4uLmFyZ3MsXG4vLyAgICAgICAgICAgICAgICAgY2IsXG4vLyAgICAgICAgICAgICAgICk7XG4vLyAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbi8vICAgICAgICAgICAgICAgcmV0dXJuIGNiKGUpO1xuLy8gICAgICAgICAgICAgfVxuLy8gICAgICAgICAgIH0sXG4vLyAgICAgICAgICAgbWV0YWRhdGEubGVuZ3RoID8gbWV0YWRhdGEgOiB1bmRlZmluZWQsXG4vLyAgICAgICAgICk7XG4vLyAgICAgICAgIFRyYW5zYWN0aW9uLnN1Ym1pdCh0cmFuc2FjdGlvbik7XG4vLyAgICAgICB9XG4vLyAgICAgfTtcbi8vXG4vLyAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG1ldGhvZFdyYXBwZXIsIFwibmFtZVwiLCB7XG4vLyAgICAgICB2YWx1ZTogcHJvcGVydHlLZXksXG4vLyAgICAgfSk7XG4vLyAgICAgZGVzY3JpcHRvci52YWx1ZSA9IG1ldGhvZFdyYXBwZXI7XG4vLyAgIH07XG4vLyB9XG5cbi8qKlxuICogQHN1bW1hcnkgVXRpbCBmdW5jdGlvbiB0byB3cmFwIHN1cGVyIGNhbGxzIHdpdGggdGhlIHRyYW5zYWN0aW9uIHdoZW4gdGhlIHN1cGVyJ3MgbWV0aG9kIGlzIGFsc28gdHJhbnNhY3Rpb25hbFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG1ldGhvZCB0aGUgc3VwZXIgbWV0aG9kIChtdXN0IGJlIGJvdW5kIHRvIHRoZSBwcm9wZXIgdGhpcyksIGVnOiBzdXBlci5jcmVhdGUuYmluZCh0aGlzKVxuICogQHBhcmFtIHthbnlbXX0gYXJncyB0aGUgYXJndW1lbnRzIHRvIGNhbGwgdGhlIG1ldGhvZCB3aXRoXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTpkYi1kZWNvcmF0b3JzLlRyYW5zYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2FjdGlvbmFsU3VwZXJDYWxsKG1ldGhvZDogYW55LCAuLi5hcmdzOiBhbnkpIHtcbiAgY29uc3QgbG9jayA9IFRyYW5zYWN0aW9uLmdldExvY2soKTtcbiAgY29uc3QgY3VycmVudFRyYW5zYWN0aW9uID0gbG9jay5jdXJyZW50VHJhbnNhY3Rpb247XG4gIG1ldGhvZChjdXJyZW50VHJhbnNhY3Rpb24sIC4uLmFyZ3MpO1xufVxuIl19
|
package/lib/esm/index.d.ts
CHANGED
package/lib/esm/index.js
CHANGED
|
@@ -1 +1,26 @@
|
|
|
1
|
-
export*from"./interfaces";
|
|
1
|
+
export * from "./interfaces";
|
|
2
|
+
export * from "./locks";
|
|
3
|
+
export * from "./constants";
|
|
4
|
+
export * from "./decorators";
|
|
5
|
+
export * from "./Transaction";
|
|
6
|
+
export * from "./types";
|
|
7
|
+
/**
|
|
8
|
+
* @summary Module summary
|
|
9
|
+
* @description Module description
|
|
10
|
+
* @module ts-workspace
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* @summary Namespace summary
|
|
14
|
+
* @description Namespace description
|
|
15
|
+
* @namespace Namespace
|
|
16
|
+
* @memberOf module:ts-workspace
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* @summary stores the current package version
|
|
20
|
+
* @description this is how you should document a constant
|
|
21
|
+
* @const VERSION
|
|
22
|
+
* @memberOf module:ts-workspace
|
|
23
|
+
*/
|
|
24
|
+
export const VERSION = "0.0.4";
|
|
25
|
+
|
|
26
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLFNBQVMsQ0FBQztBQUV4Qjs7OztHQUlHO0FBRUg7Ozs7O0dBS0c7QUFFSDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9pbnRlcmZhY2VzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9sb2Nrc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kZWNvcmF0b3JzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9UcmFuc2FjdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXNcIjtcblxuLyoqXG4gKiBAc3VtbWFyeSBNb2R1bGUgc3VtbWFyeVxuICogQGRlc2NyaXB0aW9uIE1vZHVsZSBkZXNjcmlwdGlvblxuICogQG1vZHVsZSB0cy13b3Jrc3BhY2VcbiAqL1xuXG4vKipcbiAqIEBzdW1tYXJ5IE5hbWVzcGFjZSBzdW1tYXJ5XG4gKiBAZGVzY3JpcHRpb24gTmFtZXNwYWNlIGRlc2NyaXB0aW9uXG4gKiBAbmFtZXNwYWNlIE5hbWVzcGFjZVxuICogQG1lbWJlck9mIG1vZHVsZTp0cy13b3Jrc3BhY2VcbiAqL1xuXG4vKipcbiAqIEBzdW1tYXJ5IHN0b3JlcyB0aGUgY3VycmVudCBwYWNrYWdlIHZlcnNpb25cbiAqIEBkZXNjcmlwdGlvbiB0aGlzIGlzIGhvdyB5b3Ugc2hvdWxkIGRvY3VtZW50IGEgY29uc3RhbnRcbiAqIEBjb25zdCBWRVJTSU9OXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnRzLXdvcmtzcGFjZVxuICovXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IFwiMC4wLjRcIjtcbiJdfQ==
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9pbnRlcmZhY2VzL1RyYW5zYWN0aW9uTG9jay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwiZmlsZSI6ImludGVyZmFjZXMvVHJhbnNhY3Rpb25Mb2NrLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tIFwiLi4vVHJhbnNhY3Rpb25cIjtcblxuLyoqXG4gKiBAc3VtbWFyeSBUcmFuc2FjdGlvbiBsb2NrIGludGVyZmFjZVxuICogQGludGVyZmFjZSBUcmFuc2FjdGlvbkxvY2tcbiAqXG4gKiBAY2F0ZWdvcnkgVHJhbnNhY3Rpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNhY3Rpb25Mb2NrIHtcbiAgLyoqXG4gICAqIEBzdW1tYXJ5IHN0b3JlcyB0aGUgY3VycmVudCB0cmFuc2FjdGlvbnNcbiAgICogQHByb3BlcnR5IGN1cnJlbnRUcmFuc2FjdGlvblxuICAgKi9cbiAgY3VycmVudFRyYW5zYWN0aW9uPzogVHJhbnNhY3Rpb247XG4gIC8qKlxuICAgKiBAc3VtbWFyeSBTdWJtaXRzIGEgdHJhbnNhY3Rpb24gdG8gYmUgcHJvY2Vzc2VkXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBtZXRob2RcbiAgICovXG4gIHN1Ym1pdCh0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBSZWxlYXNlcyBUaGUgbG9jayBhZnRlciB0aGUgY29uY2x1c2lvbiBvZiBhIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7RXJyfSBbZXJyXSB0aGUgZXJyb3IgKGlmIGFueSkgdGhhdCBjYXVzZWQgdGhlIHJlbGVhc2VcbiAgICogQG1ldGhvZFxuICAgKi9cbiAgcmVsZWFzZShlcnI/OiBFcnJvcik6IFByb21pc2U8dm9pZD47XG59XG4iXX0=
|
|
@@ -1 +1,3 @@
|
|
|
1
|
-
export*from"./TransactionLock";
|
|
1
|
+
export * from "./TransactionLock";
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9pbnRlcmZhY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQW1CLENBQUMiLCJmaWxlIjoiaW50ZXJmYWNlcy9pbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL1RyYW5zYWN0aW9uTG9ja1wiO1xuIl19
|
package/lib/esm/locks/Lock.js
CHANGED
|
@@ -1 +1,63 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* @summary Simple Promise based Lock class
|
|
3
|
+
*
|
|
4
|
+
* @class Lock
|
|
5
|
+
* @category Transactions
|
|
6
|
+
*/
|
|
7
|
+
export class Lock {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.queue = [];
|
|
10
|
+
this.locked = false;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* @summary executes when lock is available
|
|
14
|
+
* @param {Function} func
|
|
15
|
+
*/
|
|
16
|
+
async execute(func) {
|
|
17
|
+
await this.acquire();
|
|
18
|
+
let result;
|
|
19
|
+
try {
|
|
20
|
+
result = await Promise.resolve(func());
|
|
21
|
+
}
|
|
22
|
+
catch (e) {
|
|
23
|
+
this.release();
|
|
24
|
+
throw e;
|
|
25
|
+
}
|
|
26
|
+
this.release();
|
|
27
|
+
return result;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* @summary waits to acquire the lock
|
|
31
|
+
* @param {string} [issuer]
|
|
32
|
+
*/
|
|
33
|
+
async acquire() {
|
|
34
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
35
|
+
const self = this;
|
|
36
|
+
if (self.locked) {
|
|
37
|
+
return new Promise((resolve) => self.queue.push(resolve));
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
self.locked = true;
|
|
41
|
+
return Promise.resolve();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* @summary releases the lock
|
|
46
|
+
*/
|
|
47
|
+
release() {
|
|
48
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
49
|
+
const self = this;
|
|
50
|
+
const next = self.queue.shift();
|
|
51
|
+
if (next) {
|
|
52
|
+
if (typeof globalThis.window === "undefined")
|
|
53
|
+
globalThis.process.nextTick(next); // if you are on node
|
|
54
|
+
else
|
|
55
|
+
setTimeout(next, 0); // if you are in the browser
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
self.locked = false;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9sb2Nrcy9Mb2NrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFPLElBQUk7SUFBakI7UUFDVSxVQUFLLEdBQW1CLEVBQUUsQ0FBQztRQUMzQixXQUFNLEdBQUcsS0FBSyxDQUFDO0lBbUR6QixDQUFDO0lBakRDOzs7T0FHRztJQUNILEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBZTtRQUMzQixNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNyQixJQUFJLE1BQVcsQ0FBQztRQUNoQixJQUFJLENBQUM7WUFDSCxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDekMsQ0FBQztRQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2YsTUFBTSxDQUFDLENBQUM7UUFDVixDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2YsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxPQUFPO1FBQ1gsNERBQTREO1FBQzVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixPQUFPLElBQUksT0FBTyxDQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDbkIsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILE9BQU87UUFDTCw0REFBNEQ7UUFDNUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLE1BQU0sSUFBSSxHQUE2QixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzFELElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxJQUNFLE9BQVEsVUFBeUMsQ0FBQyxNQUFNLEtBQUssV0FBVztnQkFFeEUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxxQkFBcUI7O2dCQUNyRCxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsNEJBQTRCO1FBQ3hELENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7Q0FDRiIsImZpbGUiOiJsb2Nrcy9Mb2NrLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9ja0NhbGxhYmxlIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5cbi8qKlxuICogQHN1bW1hcnkgU2ltcGxlIFByb21pc2UgYmFzZWQgTG9jayBjbGFzc1xuICpcbiAqIEBjbGFzcyBMb2NrXG4gKiBAY2F0ZWdvcnkgVHJhbnNhY3Rpb25zXG4gKi9cbmV4cG9ydCBjbGFzcyBMb2NrIHtcbiAgcHJpdmF0ZSBxdWV1ZTogTG9ja0NhbGxhYmxlW10gPSBbXTtcbiAgcHJpdmF0ZSBsb2NrZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogQHN1bW1hcnkgZXhlY3V0ZXMgd2hlbiBsb2NrIGlzIGF2YWlsYWJsZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jXG4gICAqL1xuICBhc3luYyBleGVjdXRlKGZ1bmM6ICgpID0+IGFueSkge1xuICAgIGF3YWl0IHRoaXMuYWNxdWlyZSgpO1xuICAgIGxldCByZXN1bHQ6IGFueTtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKGZ1bmMoKSk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aGlzLnJlbGVhc2UoKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIHRoaXMucmVsZWFzZSgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgd2FpdHMgdG8gYWNxdWlyZSB0aGUgbG9ja1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW2lzc3Vlcl1cbiAgICovXG4gIGFzeW5jIGFjcXVpcmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgaWYgKHNlbGYubG9ja2VkKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHNlbGYucXVldWUucHVzaChyZXNvbHZlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGYubG9ja2VkID0gdHJ1ZTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgcmVsZWFzZXMgdGhlIGxvY2tcbiAgICovXG4gIHJlbGVhc2UoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgbmV4dDogTG9ja0NhbGxhYmxlIHwgdW5kZWZpbmVkID0gc2VsZi5xdWV1ZS5zaGlmdCgpO1xuICAgIGlmIChuZXh0KSB7XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiAoZ2xvYmFsVGhpcyBhcyB1bmtub3duIGFzIHsgd2luZG93OiBhbnkgfSkud2luZG93ID09PSBcInVuZGVmaW5lZFwiXG4gICAgICApXG4gICAgICAgIGdsb2JhbFRoaXMucHJvY2Vzcy5uZXh0VGljayhuZXh0KTsgLy8gaWYgeW91IGFyZSBvbiBub2RlXG4gICAgICBlbHNlIHNldFRpbWVvdXQobmV4dCwgMCk7IC8vIGlmIHlvdSBhcmUgaW4gdGhlIGJyb3dzZXJcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZi5sb2NrZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1 +1,117 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { Lock } from "./Lock";
|
|
2
|
+
export class SyncronousLock {
|
|
3
|
+
constructor(counter = 1, onBegin, onEnd) {
|
|
4
|
+
this.currentTransaction = undefined;
|
|
5
|
+
this.lock = new Lock();
|
|
6
|
+
this.counter = counter;
|
|
7
|
+
this.pendingTransactions = [];
|
|
8
|
+
this.onBegin = onBegin;
|
|
9
|
+
this.onEnd = onEnd;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* @summary Submits a transaction to be processed
|
|
13
|
+
* @param {Transaction} transaction
|
|
14
|
+
*/
|
|
15
|
+
submit(transaction) {
|
|
16
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
17
|
+
const self = this;
|
|
18
|
+
self.lock.acquire().then(() => {
|
|
19
|
+
if (self.currentTransaction &&
|
|
20
|
+
self.currentTransaction.id === transaction.id) {
|
|
21
|
+
self.lock.release();
|
|
22
|
+
return transaction.fire();
|
|
23
|
+
}
|
|
24
|
+
if (self.counter > 0) {
|
|
25
|
+
self.counter--;
|
|
26
|
+
self.lock.release();
|
|
27
|
+
return self.fireTransaction(transaction);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
self.pendingTransactions.push(transaction);
|
|
31
|
+
self.lock.release();
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* @summary Executes a transaction
|
|
37
|
+
*
|
|
38
|
+
* @param {Transaction} transaction
|
|
39
|
+
* @private
|
|
40
|
+
*/
|
|
41
|
+
fireTransaction(transaction) {
|
|
42
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
43
|
+
const self = this;
|
|
44
|
+
self.lock.acquire().then(() => {
|
|
45
|
+
self.currentTransaction = transaction;
|
|
46
|
+
self.lock.release();
|
|
47
|
+
if (self.onBegin)
|
|
48
|
+
self.onBegin().then(() => {
|
|
49
|
+
// all.call(
|
|
50
|
+
// self,
|
|
51
|
+
// `Firing transaction {0}. {1} remaining...`,
|
|
52
|
+
// transaction.id,
|
|
53
|
+
// this.pendingTransactions.length,
|
|
54
|
+
// );
|
|
55
|
+
transaction.fire();
|
|
56
|
+
});
|
|
57
|
+
else {
|
|
58
|
+
// all.call(
|
|
59
|
+
// self,
|
|
60
|
+
// `Firing transaction {0}. {1} remaining...`,
|
|
61
|
+
// transaction.id,
|
|
62
|
+
// this.pendingTransactions.length,
|
|
63
|
+
// );
|
|
64
|
+
transaction.fire();
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* @summary Releases The lock after the conclusion of a transaction
|
|
70
|
+
*/
|
|
71
|
+
async release(err) {
|
|
72
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
73
|
+
const self = this;
|
|
74
|
+
return new Promise((resolve) => {
|
|
75
|
+
self.lock.acquire().then(() => {
|
|
76
|
+
if (!self.currentTransaction)
|
|
77
|
+
console.warn("Trying to release an unexisting transaction. should never happen...");
|
|
78
|
+
// debug.call(
|
|
79
|
+
// self,
|
|
80
|
+
// "Releasing transaction: {0}",
|
|
81
|
+
// self.currentTransaction?.toString(true, true),
|
|
82
|
+
// );
|
|
83
|
+
self.currentTransaction = undefined;
|
|
84
|
+
self.lock.release();
|
|
85
|
+
const afterConclusionCB = () => {
|
|
86
|
+
self.lock.acquire().then(() => {
|
|
87
|
+
if (self.pendingTransactions.length > 0) {
|
|
88
|
+
const transaction = self.pendingTransactions.shift();
|
|
89
|
+
const cb = () => self.fireTransaction(transaction);
|
|
90
|
+
//
|
|
91
|
+
// all(
|
|
92
|
+
// `Releasing Transaction Lock on transaction {0}`,
|
|
93
|
+
// transaction.id,
|
|
94
|
+
// );
|
|
95
|
+
if (typeof globalThis.window ===
|
|
96
|
+
"undefined")
|
|
97
|
+
globalThis.process.nextTick(cb); // if you are on node
|
|
98
|
+
else
|
|
99
|
+
setTimeout(cb, 0); // if you are in the browser
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
self.counter++;
|
|
103
|
+
}
|
|
104
|
+
self.lock.release();
|
|
105
|
+
resolve();
|
|
106
|
+
});
|
|
107
|
+
};
|
|
108
|
+
if (self.onEnd)
|
|
109
|
+
self.onEnd(err).then(() => afterConclusionCB());
|
|
110
|
+
else
|
|
111
|
+
afterConclusionCB();
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9sb2Nrcy9TeW5jcm9ub3VzTG9jay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFlQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRTlCLE1BQU0sT0FBTyxjQUFjO0lBU3pCLFlBQ0UsVUFBa0IsQ0FBQyxFQUNuQixPQUE2QixFQUM3QixLQUFzQztRQVR4Qyx1QkFBa0IsR0FBaUIsU0FBUyxDQUFDO1FBSTVCLFNBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBT2pDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxXQUF3QjtRQUM3Qiw0REFBNEQ7UUFDNUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUM1QixJQUNFLElBQUksQ0FBQyxrQkFBa0I7Z0JBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEtBQUssV0FBVyxDQUFDLEVBQUUsRUFDN0MsQ0FBQztnQkFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNwQixPQUFPLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM1QixDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNyQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDcEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzNDLENB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LENBQUM7Z0JBQ0wsQ0FBQyxDQUFDO2dCQUVGLElBQUksSUFBSSxDQUFDLEtBQUs7b0JBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDOztvQkFDM0QsaUJBQWlCLEVBQUUsQ0FBQztZQUMzQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwiZmlsZSI6ImxvY2tzL1N5bmNyb25vdXNMb2NrLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAc3VtbWFyeSBTaW1wbGUgU3luY2hyb25vdXMgTG9jayBpbXBsZW1lbnRhdGlvblxuICogQGRlc2NyaXB0aW9uIGZvciB0cmFuc2FjdGlvbiBtYW5hZ2VtZW50XG4gKiBhZGFwdGVkIGZyb20ge0BsaW5rIGh0dHBzOi8vd3d3LnRhbGtpbmdoaWdodGVjaC5jb20vZW4vY3JlYXRpbmctYS1qcy1sb2NrLWZvci1hLXJlc291cmNlL31cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gW2NvdW50ZXJdIHRoZSBudW1iZXIgb2Ygc2ltdWx0YW5lb3VzIHRyYW5zYWN0aW9ucyBhbGxvd2VkLiBkZWZhdWx0cyB0byAxXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb25CZWdpbl0gdG8gYmUgY2FsbGVkIGF0IHRoZSBzdGFydCBvZiB0aGUgdHJhbnNhY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvbkVuZF0gdG8gYmUgY2FsbGVkIGF0IHRoZSBjb25jbHVzaW9uIG9mIHRoZSB0cmFuc2FjdGlvblxuICpcbiAqIEBjbGFzcyBTeW5jcm9ub3VzTG9ja1xuICogQGltcGxlbWVudHMgVHJhbnNhY3Rpb25Mb2NrXG4gKlxuICogQGNhdGVnb3J5IFRyYW5zYWN0aW9uc1xuICovIGltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSBcIi4uL1RyYW5zYWN0aW9uXCI7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkxvY2sgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9UcmFuc2FjdGlvbkxvY2tcIjtcbmltcG9ydCB7IExvY2sgfSBmcm9tIFwiLi9Mb2NrXCI7XG5cbmV4cG9ydCBjbGFzcyBTeW5jcm9ub3VzTG9jayBpbXBsZW1lbnRzIFRyYW5zYWN0aW9uTG9jayB7XG4gIHByaXZhdGUgY291bnRlcjogbnVtYmVyO1xuICBwcml2YXRlIHBlbmRpbmdUcmFuc2FjdGlvbnM6IFRyYW5zYWN0aW9uW107XG4gIGN1cnJlbnRUcmFuc2FjdGlvbj86IFRyYW5zYWN0aW9uID0gdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IG9uQmVnaW4/OiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IG9uRW5kPzogKGVycj86IEVycm9yKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9jayA9IG5ldyBMb2NrKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgY291bnRlcjogbnVtYmVyID0gMSxcbiAgICBvbkJlZ2luPzogKCkgPT4gUHJvbWlzZTx2b2lkPixcbiAgICBvbkVuZD86IChlcnI/OiBFcnJvcikgPT4gUHJvbWlzZTx2b2lkPixcbiAgKSB7XG4gICAgdGhpcy5jb3VudGVyID0gY291bnRlcjtcbiAgICB0aGlzLnBlbmRpbmdUcmFuc2FjdGlvbnMgPSBbXTtcbiAgICB0aGlzLm9uQmVnaW4gPSBvbkJlZ2luO1xuICAgIHRoaXMub25FbmQgPSBvbkVuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBTdWJtaXRzIGEgdHJhbnNhY3Rpb24gdG8gYmUgcHJvY2Vzc2VkXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqL1xuICBzdWJtaXQodHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgc2VsZi5sb2NrLmFjcXVpcmUoKS50aGVuKCgpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgc2VsZi5jdXJyZW50VHJhbnNhY3Rpb24gJiZcbiAgICAgICAgc2VsZi5jdXJyZW50VHJhbnNhY3Rpb24uaWQgPT09IHRyYW5zYWN0aW9uLmlkXG4gICAgICApIHtcbiAgICAgICAgc2VsZi5sb2NrLnJlbGVhc2UoKTtcbiAgICAgICAgcmV0dXJuIHRyYW5zYWN0aW9uLmZpcmUoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlbGYuY291bnRlciA+IDApIHtcbiAgICAgICAgc2VsZi5jb3VudGVyLS07XG4gICAgICAgIHNlbGYubG9jay5yZWxlYXNlKCk7XG4gICAgICAgIHJldHVybiBzZWxmLmZpcmVUcmFuc2FjdGlvbih0cmFuc2FjdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxmLnBlbmRpbmdUcmFuc2FjdGlvbnMucHVzaCh0cmFuc2FjdGlvbik7XG4gICAgICAgIHNlbGYubG9jay5yZWxlYXNlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgRXhlY3V0ZXMgYSB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBmaXJlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgc2VsZi5sb2NrLmFjcXVpcmUoKS50aGVuKCgpID0+IHtcbiAgICAgIHNlbGYuY3VycmVudFRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb247XG4gICAgICBzZWxmLmxvY2sucmVsZWFzZSgpO1xuICAgICAgaWYgKHNlbGYub25CZWdpbilcbiAgICAgICAgc2VsZi5vbkJlZ2luKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgLy8gYWxsLmNhbGwoXG4gICAgICAgICAgLy8gICBzZWxmLFxuICAgICAgICAgIC8vICAgYEZpcmluZyB0cmFuc2FjdGlvbiB7MH0uIHsxfSByZW1haW5pbmcuLi5gLFxuICAgICAgICAgIC8vICAgdHJhbnNhY3Rpb24uaWQsXG4gICAgICAgICAgLy8gICB0aGlzLnBlbmRpbmdUcmFuc2FjdGlvbnMubGVuZ3RoLFxuICAgICAgICAgIC8vICk7XG4gICAgICAgICAgdHJhbnNhY3Rpb24uZmlyZSgpO1xuICAgICAgICB9KTtcbiAgICAgIGVsc2Uge1xuICAgICAgICAvLyBhbGwuY2FsbChcbiAgICAgICAgLy8gICBzZWxmLFxuICAgICAgICAvLyAgIGBGaXJpbmcgdHJhbnNhY3Rpb24gezB9LiB7MX0gcmVtYWluaW5nLi4uYCxcbiAgICAgICAgLy8gICB0cmFuc2FjdGlvbi5pZCxcbiAgICAgICAgLy8gICB0aGlzLnBlbmRpbmdUcmFuc2FjdGlvbnMubGVuZ3RoLFxuICAgICAgICAvLyApO1xuICAgICAgICB0cmFuc2FjdGlvbi5maXJlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFJlbGVhc2VzIFRoZSBsb2NrIGFmdGVyIHRoZSBjb25jbHVzaW9uIG9mIGEgdHJhbnNhY3Rpb25cbiAgICovXG4gIGFzeW5jIHJlbGVhc2UoZXJyPzogRXJyb3IpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgIHNlbGYubG9jay5hY3F1aXJlKCkudGhlbigoKSA9PiB7XG4gICAgICAgIGlmICghc2VsZi5jdXJyZW50VHJhbnNhY3Rpb24pXG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgXCJUcnlpbmcgdG8gcmVsZWFzZSBhbiB1bmV4aXN0aW5nIHRyYW5zYWN0aW9uLiBzaG91bGQgbmV2ZXIgaGFwcGVuLi4uXCIsXG4gICAgICAgICAgKTtcbiAgICAgICAgLy8gZGVidWcuY2FsbChcbiAgICAgICAgLy8gICBzZWxmLFxuICAgICAgICAvLyAgIFwiUmVsZWFzaW5nIHRyYW5zYWN0aW9uOiB7MH1cIixcbiAgICAgICAgLy8gICBzZWxmLmN1cnJlbnRUcmFuc2FjdGlvbj8udG9TdHJpbmcodHJ1ZSwgdHJ1ZSksXG4gICAgICAgIC8vICk7XG4gICAgICAgIHNlbGYuY3VycmVudFRyYW5zYWN0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICBzZWxmLmxvY2sucmVsZWFzZSgpO1xuXG4gICAgICAgIGNvbnN0IGFmdGVyQ29uY2x1c2lvbkNCID0gKCkgPT4ge1xuICAgICAgICAgIHNlbGYubG9jay5hY3F1aXJlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2VsZi5wZW5kaW5nVHJhbnNhY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPVxuICAgICAgICAgICAgICAgIHNlbGYucGVuZGluZ1RyYW5zYWN0aW9ucy5zaGlmdCgpIGFzIFRyYW5zYWN0aW9uO1xuXG4gICAgICAgICAgICAgIGNvbnN0IGNiID0gKCkgPT4gc2VsZi5maXJlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pO1xuICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAvLyBhbGwoXG4gICAgICAgICAgICAgIC8vICAgYFJlbGVhc2luZyBUcmFuc2FjdGlvbiBMb2NrIG9uIHRyYW5zYWN0aW9uIHswfWAsXG4gICAgICAgICAgICAgIC8vICAgdHJhbnNhY3Rpb24uaWQsXG4gICAgICAgICAgICAgIC8vICk7XG5cbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHR5cGVvZiAoZ2xvYmFsVGhpcyBhcyB1bmtub3duIGFzIHsgd2luZG93OiBhbnkgfSkud2luZG93ID09PVxuICAgICAgICAgICAgICAgIFwidW5kZWZpbmVkXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGdsb2JhbFRoaXMucHJvY2Vzcy5uZXh0VGljayhjYik7IC8vIGlmIHlvdSBhcmUgb24gbm9kZVxuICAgICAgICAgICAgICBlbHNlIHNldFRpbWVvdXQoY2IsIDApOyAvLyBpZiB5b3UgYXJlIGluIHRoZSBicm93c2VyXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzZWxmLmNvdW50ZXIrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYubG9jay5yZWxlYXNlKCk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHNlbGYub25FbmQpIHNlbGYub25FbmQoZXJyKS50aGVuKCgpID0+IGFmdGVyQ29uY2x1c2lvbkNCKCkpO1xuICAgICAgICBlbHNlIGFmdGVyQ29uY2x1c2lvbkNCKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuIl19
|
package/lib/esm/locks/index.js
CHANGED
|
@@ -1 +1,4 @@
|
|
|
1
|
-
export*from"./Lock";
|
|
1
|
+
export * from "./Lock";
|
|
2
|
+
export * from "./SyncronousLock";
|
|
3
|
+
|
|
4
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9sb2Nrcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLGtCQUFrQixDQUFDIiwiZmlsZSI6ImxvY2tzL2luZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vTG9ja1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vU3luY3Jvbm91c0xvY2tcIjtcbiJdfQ==
|
package/lib/esm/types.js
CHANGED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwiZmlsZSI6InR5cGVzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAc3VtbWFyeSBkZWZpbmVzIGEgY2FsbGFibGUgYXMgcGVyY2VpdmVkIGJ5IHRoZSBsb2NrXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTpkYi1kZWNvcmF0b3JzLlRyYW5zYWN0aW9uc1xuICovXG5leHBvcnQgdHlwZSBMb2NrQ2FsbGFibGUgPSAodmFsdWU/OiB2b2lkIHwgUHJvbWlzZUxpa2U8dm9pZD4pID0+IHZvaWQ7XG5cbmV4cG9ydCB0eXBlIENhbGxiYWNrID0gKGVycj86IEVycm9yLCByZXN1bHQ/OiBhbnksIC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkO1xuIl19
|
package/lib/esm/utils.js
CHANGED
|
@@ -1 +1,15 @@
|
|
|
1
|
-
function getObjectName(
|
|
1
|
+
export function getObjectName(obj) {
|
|
2
|
+
if (!obj)
|
|
3
|
+
return;
|
|
4
|
+
if (typeof obj === "string")
|
|
5
|
+
return obj;
|
|
6
|
+
if (obj.constructor &&
|
|
7
|
+
obj.constructor.name &&
|
|
8
|
+
["Function", "Object"].indexOf(obj.constructor.name) === -1)
|
|
9
|
+
return obj.constructor.name;
|
|
10
|
+
if (typeof obj === "function" && obj.name)
|
|
11
|
+
return obj.name;
|
|
12
|
+
return obj.toString();
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLFVBQVUsYUFBYSxDQUFDLEdBQVE7SUFDcEMsSUFBSSxDQUFDLEdBQUc7UUFBRSxPQUFPO0lBQ2pCLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUTtRQUFFLE9BQU8sR0FBRyxDQUFDO0lBQ3hDLElBQ0UsR0FBRyxDQUFDLFdBQVc7UUFDZixHQUFHLENBQUMsV0FBVyxDQUFDLElBQUk7UUFDcEIsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTNELE9BQU8sR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7SUFDOUIsSUFBSSxPQUFPLEdBQUcsS0FBSyxVQUFVLElBQUksR0FBRyxDQUFDLElBQUk7UUFBRSxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUM7SUFDM0QsT0FBTyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDeEIsQ0FBQyIsImZpbGUiOiJ1dGlscy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBnZXRPYmplY3ROYW1lKG9iajogYW55KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFvYmopIHJldHVybjtcbiAgaWYgKHR5cGVvZiBvYmogPT09IFwic3RyaW5nXCIpIHJldHVybiBvYmo7XG4gIGlmIChcbiAgICBvYmouY29uc3RydWN0b3IgJiZcbiAgICBvYmouY29uc3RydWN0b3IubmFtZSAmJlxuICAgIFtcIkZ1bmN0aW9uXCIsIFwiT2JqZWN0XCJdLmluZGV4T2Yob2JqLmNvbnN0cnVjdG9yLm5hbWUpID09PSAtMVxuICApXG4gICAgcmV0dXJuIG9iai5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAodHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5uYW1lKSByZXR1cm4gb2JqLm5hbWU7XG4gIHJldHVybiBvYmoudG9TdHJpbmcoKTtcbn1cbiJdfQ==
|
package/lib/index.cjs
CHANGED
|
@@ -1 +1,43 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.VERSION = void 0;
|
|
18
|
+
__exportStar(require("./interfaces/index.cjs"), exports);
|
|
19
|
+
__exportStar(require("./locks/index.cjs"), exports);
|
|
20
|
+
__exportStar(require("./constants.cjs"), exports);
|
|
21
|
+
__exportStar(require("./decorators.cjs"), exports);
|
|
22
|
+
__exportStar(require("./Transaction.cjs"), exports);
|
|
23
|
+
__exportStar(require("./types.cjs"), exports);
|
|
24
|
+
/**
|
|
25
|
+
* @summary Module summary
|
|
26
|
+
* @description Module description
|
|
27
|
+
* @module ts-workspace
|
|
28
|
+
*/
|
|
29
|
+
/**
|
|
30
|
+
* @summary Namespace summary
|
|
31
|
+
* @description Namespace description
|
|
32
|
+
* @namespace Namespace
|
|
33
|
+
* @memberOf module:ts-workspace
|
|
34
|
+
*/
|
|
35
|
+
/**
|
|
36
|
+
* @summary stores the current package version
|
|
37
|
+
* @description this is how you should document a constant
|
|
38
|
+
* @const VERSION
|
|
39
|
+
* @memberOf module:ts-workspace
|
|
40
|
+
*/
|
|
41
|
+
exports.VERSION = "0.0.4";
|
|
42
|
+
|
|
43
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUE2QjtBQUM3QiwwQ0FBd0I7QUFDeEIsOENBQTRCO0FBQzVCLCtDQUE2QjtBQUM3QixnREFBOEI7QUFDOUIsMENBQXdCO0FBRXhCOzs7O0dBSUc7QUFFSDs7Ozs7R0FLRztBQUVIOzs7OztHQUtHO0FBQ1UsUUFBQSxPQUFPLEdBQUcsT0FBTyxDQUFDIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vaW50ZXJmYWNlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vbG9ja3NcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbnN0YW50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vVHJhbnNhY3Rpb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzXCI7XG5cbi8qKlxuICogQHN1bW1hcnkgTW9kdWxlIHN1bW1hcnlcbiAqIEBkZXNjcmlwdGlvbiBNb2R1bGUgZGVzY3JpcHRpb25cbiAqIEBtb2R1bGUgdHMtd29ya3NwYWNlXG4gKi9cblxuLyoqXG4gKiBAc3VtbWFyeSBOYW1lc3BhY2Ugc3VtbWFyeVxuICogQGRlc2NyaXB0aW9uIE5hbWVzcGFjZSBkZXNjcmlwdGlvblxuICogQG5hbWVzcGFjZSBOYW1lc3BhY2VcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dHMtd29ya3NwYWNlXG4gKi9cblxuLyoqXG4gKiBAc3VtbWFyeSBzdG9yZXMgdGhlIGN1cnJlbnQgcGFja2FnZSB2ZXJzaW9uXG4gKiBAZGVzY3JpcHRpb24gdGhpcyBpcyBob3cgeW91IHNob3VsZCBkb2N1bWVudCBhIGNvbnN0YW50XG4gKiBAY29uc3QgVkVSU0lPTlxuICogQG1lbWJlck9mIG1vZHVsZTp0cy13b3Jrc3BhY2VcbiAqL1xuZXhwb3J0IGNvbnN0IFZFUlNJT04gPSBcIjAuMC40XCI7XG4iXX0=
|
package/lib/index.d.ts
CHANGED
|
@@ -1 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
|
|
4
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9pbnRlcmZhY2VzL1RyYW5zYWN0aW9uTG9jay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwiZmlsZSI6ImludGVyZmFjZXMvVHJhbnNhY3Rpb25Mb2NrLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tIFwiLi4vVHJhbnNhY3Rpb25cIjtcblxuLyoqXG4gKiBAc3VtbWFyeSBUcmFuc2FjdGlvbiBsb2NrIGludGVyZmFjZVxuICogQGludGVyZmFjZSBUcmFuc2FjdGlvbkxvY2tcbiAqXG4gKiBAY2F0ZWdvcnkgVHJhbnNhY3Rpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNhY3Rpb25Mb2NrIHtcbiAgLyoqXG4gICAqIEBzdW1tYXJ5IHN0b3JlcyB0aGUgY3VycmVudCB0cmFuc2FjdGlvbnNcbiAgICogQHByb3BlcnR5IGN1cnJlbnRUcmFuc2FjdGlvblxuICAgKi9cbiAgY3VycmVudFRyYW5zYWN0aW9uPzogVHJhbnNhY3Rpb247XG4gIC8qKlxuICAgKiBAc3VtbWFyeSBTdWJtaXRzIGEgdHJhbnNhY3Rpb24gdG8gYmUgcHJvY2Vzc2VkXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBtZXRob2RcbiAgICovXG4gIHN1Ym1pdCh0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBSZWxlYXNlcyBUaGUgbG9jayBhZnRlciB0aGUgY29uY2x1c2lvbiBvZiBhIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7RXJyfSBbZXJyXSB0aGUgZXJyb3IgKGlmIGFueSkgdGhhdCBjYXVzZWQgdGhlIHJlbGVhc2VcbiAgICogQG1ldGhvZFxuICAgKi9cbiAgcmVsZWFzZShlcnI/OiBFcnJvcik6IFByb21pc2U8dm9pZD47XG59XG4iXX0=
|
package/lib/interfaces/index.cjs
CHANGED
|
@@ -1 +1,19 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./TransactionLock.cjs"), exports);
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9pbnRlcmZhY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBa0MiLCJmaWxlIjoiaW50ZXJmYWNlcy9pbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL1RyYW5zYWN0aW9uTG9ja1wiO1xuIl19
|
package/lib/locks/Lock.cjs
CHANGED
|
@@ -1 +1,67 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Lock = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* @summary Simple Promise based Lock class
|
|
6
|
+
*
|
|
7
|
+
* @class Lock
|
|
8
|
+
* @category Transactions
|
|
9
|
+
*/
|
|
10
|
+
class Lock {
|
|
11
|
+
constructor() {
|
|
12
|
+
this.queue = [];
|
|
13
|
+
this.locked = false;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* @summary executes when lock is available
|
|
17
|
+
* @param {Function} func
|
|
18
|
+
*/
|
|
19
|
+
async execute(func) {
|
|
20
|
+
await this.acquire();
|
|
21
|
+
let result;
|
|
22
|
+
try {
|
|
23
|
+
result = await Promise.resolve(func());
|
|
24
|
+
}
|
|
25
|
+
catch (e) {
|
|
26
|
+
this.release();
|
|
27
|
+
throw e;
|
|
28
|
+
}
|
|
29
|
+
this.release();
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* @summary waits to acquire the lock
|
|
34
|
+
* @param {string} [issuer]
|
|
35
|
+
*/
|
|
36
|
+
async acquire() {
|
|
37
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
38
|
+
const self = this;
|
|
39
|
+
if (self.locked) {
|
|
40
|
+
return new Promise((resolve) => self.queue.push(resolve));
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
self.locked = true;
|
|
44
|
+
return Promise.resolve();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* @summary releases the lock
|
|
49
|
+
*/
|
|
50
|
+
release() {
|
|
51
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
52
|
+
const self = this;
|
|
53
|
+
const next = self.queue.shift();
|
|
54
|
+
if (next) {
|
|
55
|
+
if (typeof globalThis.window === "undefined")
|
|
56
|
+
globalThis.process.nextTick(next); // if you are on node
|
|
57
|
+
else
|
|
58
|
+
setTimeout(next, 0); // if you are in the browser
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
self.locked = false;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
exports.Lock = Lock;
|
|
66
|
+
|
|
67
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9sb2Nrcy9Mb2NrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBOzs7OztHQUtHO0FBQ0gsTUFBYSxJQUFJO0lBQWpCO1FBQ1UsVUFBSyxHQUFtQixFQUFFLENBQUM7UUFDM0IsV0FBTSxHQUFHLEtBQUssQ0FBQztJQW1EekIsQ0FBQztJQWpEQzs7O09BR0c7SUFDSCxLQUFLLENBQUMsT0FBTyxDQUFDLElBQWU7UUFDM0IsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDckIsSUFBSSxNQUFXLENBQUM7UUFDaEIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNmLE1BQU0sQ0FBQyxDQUFDO1FBQ1YsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNmLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsT0FBTztRQUNYLDREQUE0RDtRQUM1RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEIsT0FBTyxJQUFJLE9BQU8sQ0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNsRSxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ25CLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxPQUFPO1FBQ0wsNERBQTREO1FBQzVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztRQUNsQixNQUFNLElBQUksR0FBNkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMxRCxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsSUFDRSxPQUFRLFVBQXlDLENBQUMsTUFBTSxLQUFLLFdBQVc7Z0JBRXhFLFVBQVUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMscUJBQXFCOztnQkFDckQsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLDRCQUE0QjtRQUN4RCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFyREQsb0JBcURDIiwiZmlsZSI6ImxvY2tzL0xvY2suanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2NrQ2FsbGFibGUgfSBmcm9tIFwiLi4vdHlwZXNcIjtcblxuLyoqXG4gKiBAc3VtbWFyeSBTaW1wbGUgUHJvbWlzZSBiYXNlZCBMb2NrIGNsYXNzXG4gKlxuICogQGNsYXNzIExvY2tcbiAqIEBjYXRlZ29yeSBUcmFuc2FjdGlvbnNcbiAqL1xuZXhwb3J0IGNsYXNzIExvY2sge1xuICBwcml2YXRlIHF1ZXVlOiBMb2NrQ2FsbGFibGVbXSA9IFtdO1xuICBwcml2YXRlIGxvY2tlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBleGVjdXRlcyB3aGVuIGxvY2sgaXMgYXZhaWxhYmxlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmNcbiAgICovXG4gIGFzeW5jIGV4ZWN1dGUoZnVuYzogKCkgPT4gYW55KSB7XG4gICAgYXdhaXQgdGhpcy5hY3F1aXJlKCk7XG4gICAgbGV0IHJlc3VsdDogYW55O1xuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBhd2FpdCBQcm9taXNlLnJlc29sdmUoZnVuYygpKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRoaXMucmVsZWFzZSgpO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgdGhpcy5yZWxlYXNlKCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSB3YWl0cyB0byBhY3F1aXJlIHRoZSBsb2NrXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbaXNzdWVyXVxuICAgKi9cbiAgYXN5bmMgYWNxdWlyZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBpZiAoc2VsZi5sb2NrZWQpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4gc2VsZi5xdWV1ZS5wdXNoKHJlc29sdmUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZi5sb2NrZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSByZWxlYXNlcyB0aGUgbG9ja1xuICAgKi9cbiAgcmVsZWFzZSgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCBuZXh0OiBMb2NrQ2FsbGFibGUgfCB1bmRlZmluZWQgPSBzZWxmLnF1ZXVlLnNoaWZ0KCk7XG4gICAgaWYgKG5leHQpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIChnbG9iYWxUaGlzIGFzIHVua25vd24gYXMgeyB3aW5kb3c6IGFueSB9KS53aW5kb3cgPT09IFwidW5kZWZpbmVkXCJcbiAgICAgIClcbiAgICAgICAgZ2xvYmFsVGhpcy5wcm9jZXNzLm5leHRUaWNrKG5leHQpOyAvLyBpZiB5b3UgYXJlIG9uIG5vZGVcbiAgICAgIGVsc2Ugc2V0VGltZW91dChuZXh0LCAwKTsgLy8gaWYgeW91IGFyZSBpbiB0aGUgYnJvd3NlclxuICAgIH0gZWxzZSB7XG4gICAgICBzZWxmLmxvY2tlZCA9IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuIl19
|