@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/Transaction.cjs
CHANGED
|
@@ -1,3 +1,152 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Transaction = void 0;
|
|
4
|
+
const reflection_1 = require("@decaf-ts/reflection");
|
|
5
|
+
const SyncronousLock_1 = require("./locks/SyncronousLock.cjs");
|
|
6
|
+
const db_decorators_1 = require("@decaf-ts/db-decorators");
|
|
7
|
+
const utils_1 = require("./utils.cjs");
|
|
8
|
+
const constants_1 = require("./constants.cjs");
|
|
9
|
+
class Transaction {
|
|
10
|
+
constructor(source, method, action, metadata) {
|
|
11
|
+
this.id = Date.now();
|
|
12
|
+
this.action = action;
|
|
13
|
+
this.method = method;
|
|
14
|
+
this.log = [[this.id, source, method].join(" | ")];
|
|
15
|
+
this.source = source;
|
|
16
|
+
this.metadata = metadata;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* @summary Pushes a transaction to que queue and waits its resolution
|
|
20
|
+
*
|
|
21
|
+
* @param {any} issuer any class. will be used as this when calling the callbackMethod
|
|
22
|
+
* @param {Function} callbackMethod callback function containing the transaction. will be called with the issuear as this
|
|
23
|
+
* @param {any[]} args arguments to pass to the method. Last one must be the callback
|
|
24
|
+
*/
|
|
25
|
+
static push(issuer, callbackMethod, ...args) {
|
|
26
|
+
const callback = args.pop();
|
|
27
|
+
if (!callback || typeof callback !== "function")
|
|
28
|
+
throw new Error("Missing callback");
|
|
29
|
+
const cb = (err, ...args) => {
|
|
30
|
+
this.getLock()
|
|
31
|
+
.release(err)
|
|
32
|
+
.then(() => callback(err, ...args));
|
|
33
|
+
};
|
|
34
|
+
const transaction = new Transaction(issuer.constructor.name, callbackMethod.name ? (0, utils_1.getObjectName)(callbackMethod) : "Anonymous", () => {
|
|
35
|
+
return callbackMethod.call(transaction.bindToTransaction(issuer), ...args, cb);
|
|
36
|
+
});
|
|
37
|
+
this.getLock().submit(transaction);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* @summary Sets the lock to be used
|
|
41
|
+
* @param lock
|
|
42
|
+
*/
|
|
43
|
+
static setLock(lock) {
|
|
44
|
+
this.lock = lock;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* @summary gets the lock
|
|
48
|
+
*/
|
|
49
|
+
static getLock() {
|
|
50
|
+
if (!this.lock)
|
|
51
|
+
this.lock = new SyncronousLock_1.SyncronousLock();
|
|
52
|
+
return this.lock;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* @summary submits a transaction
|
|
56
|
+
* @param {Transaction} transaction
|
|
57
|
+
*/
|
|
58
|
+
static submit(transaction) {
|
|
59
|
+
this.getLock().submit(transaction);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* @summary releases the lock
|
|
63
|
+
* @param {Err} err
|
|
64
|
+
*/
|
|
65
|
+
static async release(err) {
|
|
66
|
+
return this.getLock().release(err);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* @summary retrieves the metadata for the transaction
|
|
70
|
+
*/
|
|
71
|
+
getMetadata() {
|
|
72
|
+
return this.metadata ? [...this.metadata] : undefined;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* @summary Binds a new operation to the current transaction
|
|
76
|
+
* @param {Transaction} nextTransaction
|
|
77
|
+
*/
|
|
78
|
+
bindTransaction(nextTransaction) {
|
|
79
|
+
// all(`Binding the {0} to {1}`, nextTransaction, this);
|
|
80
|
+
this.log.push(...nextTransaction.log);
|
|
81
|
+
nextTransaction.bindTransaction = this.bindToTransaction.bind(this);
|
|
82
|
+
nextTransaction.bindToTransaction = this.bindToTransaction.bind(this);
|
|
83
|
+
this.action = nextTransaction.action;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* @summary Binds the Transactional Decorated Object to the transaction
|
|
87
|
+
* @description by having all {@link transactional} decorated
|
|
88
|
+
* methods always pass the current Transaction as an argument
|
|
89
|
+
*
|
|
90
|
+
* @param {any} obj
|
|
91
|
+
* @return {any} the bound {@param obj}
|
|
92
|
+
*/
|
|
93
|
+
bindToTransaction(obj) {
|
|
94
|
+
const transactionalMethods = (0, db_decorators_1.getAllPropertyDecoratorsRecursive)(obj, undefined, constants_1.TransactionalKeys.REFLECT);
|
|
95
|
+
if (!transactionalMethods)
|
|
96
|
+
return obj;
|
|
97
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
98
|
+
const self = this;
|
|
99
|
+
const boundObj = (0, reflection_1.getAllProperties)(obj).reduce((accum, k) => {
|
|
100
|
+
if (Object.keys(transactionalMethods).indexOf(k) !== -1 &&
|
|
101
|
+
transactionalMethods[k].find((o) => o.key === constants_1.TransactionalKeys.TRANSACTIONAL))
|
|
102
|
+
accum[k] = (...args) => obj[k].call(obj.__originalObj || obj, self, ...args);
|
|
103
|
+
else if (k === "clazz" || k === "constructor")
|
|
104
|
+
accum[k] = obj[k];
|
|
105
|
+
else if (typeof obj[k] === "function")
|
|
106
|
+
accum[k] = obj[k].bind(obj.__originalObj || obj);
|
|
107
|
+
else if (typeof obj[k] === "object" && obj[k].constructor) {
|
|
108
|
+
const decs = (0, reflection_1.getClassDecorators)(constants_1.TransactionalKeys.REFLECT, obj[k]);
|
|
109
|
+
if (decs.find((e) => e.key === constants_1.TransactionalKeys.TRANSACTIONAL))
|
|
110
|
+
accum[k] = self.bindToTransaction(obj[k]);
|
|
111
|
+
else
|
|
112
|
+
accum[k] = obj[k];
|
|
113
|
+
}
|
|
114
|
+
else
|
|
115
|
+
accum[k] = obj[k];
|
|
116
|
+
return accum;
|
|
117
|
+
}, {});
|
|
118
|
+
boundObj[db_decorators_1.DBKeys.ORIGINAL] = obj[db_decorators_1.DBKeys.ORIGINAL] || obj;
|
|
119
|
+
boundObj.toString = () => (0, utils_1.getObjectName)(boundObj[db_decorators_1.DBKeys.ORIGINAL]) +
|
|
120
|
+
" proxy for transaction " +
|
|
121
|
+
this.id;
|
|
122
|
+
return boundObj;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* @summary Fires the Transaction
|
|
126
|
+
*/
|
|
127
|
+
fire() {
|
|
128
|
+
if (!this.action)
|
|
129
|
+
throw new Error(`Missing the method`);
|
|
130
|
+
return this.action();
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* @summary toString override
|
|
134
|
+
* @param {boolean} [withId] defaults to true
|
|
135
|
+
* @param {boolean} [withLog] defaults to true
|
|
136
|
+
*/
|
|
137
|
+
toString(withId = true, withLog = false) {
|
|
138
|
+
return `${withId ? `[${this.id}]` : ""}[Transaction][${this.source}.${this.method}${withLog ? `]\nTransaction Log:\n${this.log.join("\n")}` : "]"}`;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* @summary gets the transactions reflections key
|
|
142
|
+
* @function getRepoKey
|
|
143
|
+
* @param {string} key
|
|
144
|
+
* @memberOf module:db-decorators.Transactions
|
|
145
|
+
* */
|
|
146
|
+
static key(key) {
|
|
147
|
+
return constants_1.TransactionalKeys.REFLECT + key;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
exports.Transaction = Transaction;
|
|
151
|
+
|
|
152
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,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KlxuICogQHN1bW1hcnkgVHJhbnNhY3Rpb24gQ2xhc3NcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gW21ldGhvZF1cbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKTogdm9pZH0gW2FjdGlvbl1cbiAqIEBwYXJhbSB7YW55W119IFttZXRhZGF0YV1cbiAqXG4gKiBAY2xhc3MgVHJhbnNhY3Rpb25cbiAqXG4gKiBAY2F0ZWdvcnkgVHJhbnNhY3Rpb25zXG4gKi9cbmltcG9ydCB7IFRyYW5zYWN0aW9uTG9jayB9IGZyb20gXCIuL2ludGVyZmFjZXMvVHJhbnNhY3Rpb25Mb2NrXCI7XG5pbXBvcnQgeyBnZXRBbGxQcm9wZXJ0aWVzLCBnZXRDbGFzc0RlY29yYXRvcnMgfSBmcm9tIFwiQGRlY2FmLXRzL3JlZmxlY3Rpb25cIjtcbmltcG9ydCB7IENhbGxiYWNrIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IFN5bmNyb25vdXNMb2NrIH0gZnJvbSBcIi4vbG9ja3MvU3luY3Jvbm91c0xvY2tcIjtcbmltcG9ydCB7XG4gIERCS2V5cyxcbiAgZ2V0QWxsUHJvcGVydHlEZWNvcmF0b3JzUmVjdXJzaXZlLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7IGdldE9iamVjdE5hbWUgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25hbEtleXMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uIHtcbiAgcmVhZG9ubHkgaWQ6IG51bWJlcjtcbiAgcHJvdGVjdGVkIGFjdGlvbj86ICgpID0+IGFueTtcbiAgcmVhZG9ubHkgbWV0aG9kPzogc3RyaW5nO1xuICByZWFkb25seSBzb3VyY2U/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGxvZzogc3RyaW5nW107XG4gIHByaXZhdGUgcmVhZG9ubHkgbWV0YWRhdGE/OiBhbnlbXTtcblxuICBwcml2YXRlIHN0YXRpYyBsb2NrOiBUcmFuc2FjdGlvbkxvY2s7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc291cmNlOiBzdHJpbmcsXG4gICAgbWV0aG9kPzogc3RyaW5nLFxuICAgIGFjdGlvbj86ICgpID0+IGFueSxcbiAgICBtZXRhZGF0YT86IGFueVtdXG4gICkge1xuICAgIHRoaXMuaWQgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuYWN0aW9uID0gYWN0aW9uO1xuICAgIHRoaXMubWV0aG9kID0gbWV0aG9kO1xuICAgIHRoaXMubG9nID0gW1t0aGlzLmlkLCBzb3VyY2UsIG1ldGhvZF0uam9pbihcIiB8IFwiKV07XG4gICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgdGhpcy5tZXRhZGF0YSA9IG1ldGFkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFB1c2hlcyBhIHRyYW5zYWN0aW9uIHRvIHF1ZSBxdWV1ZSBhbmQgd2FpdHMgaXRzIHJlc29sdXRpb25cbiAgICpcbiAgICogQHBhcmFtIHthbnl9IGlzc3VlciBhbnkgY2xhc3MuIHdpbGwgYmUgdXNlZCBhcyB0aGlzIHdoZW4gY2FsbGluZyB0aGUgY2FsbGJhY2tNZXRob2RcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tNZXRob2QgY2FsbGJhY2sgZnVuY3Rpb24gY29udGFpbmluZyB0aGUgdHJhbnNhY3Rpb24uIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIGlzc3VlYXIgYXMgdGhpc1xuICAgKiBAcGFyYW0ge2FueVtdfSBhcmdzIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBtZXRob2QuIExhc3Qgb25lIG11c3QgYmUgdGhlIGNhbGxiYWNrXG4gICAqL1xuICBzdGF0aWMgcHVzaChcbiAgICBpc3N1ZXI6IGFueSxcbiAgICBjYWxsYmFja01ldGhvZDogKC4uLmFyZ3p6OiAoYW55IHwgQ2FsbGJhY2spW10pID0+IHZvaWQsXG4gICAgLi4uYXJnczogKGFueSB8IENhbGxiYWNrKVtdXG4gICkge1xuICAgIGNvbnN0IGNhbGxiYWNrOiBDYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgaWYgKCFjYWxsYmFjayB8fCB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIilcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgY2FsbGJhY2tcIik7XG4gICAgY29uc3QgY2IgPSAoZXJyPzogRXJyb3IsIC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgICB0aGlzLmdldExvY2soKVxuICAgICAgICAucmVsZWFzZShlcnIpXG4gICAgICAgIC50aGVuKCgpID0+IGNhbGxiYWNrKGVyciwgLi4uYXJncykpO1xuICAgIH07XG4gICAgY29uc3QgdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKFxuICAgICAgaXNzdWVyLmNvbnN0cnVjdG9yLm5hbWUsXG4gICAgICBjYWxsYmFja01ldGhvZC5uYW1lID8gZ2V0T2JqZWN0TmFtZShjYWxsYmFja01ldGhvZCkgOiBcIkFub255bW91c1wiLFxuICAgICAgKCkgPT4ge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2tNZXRob2QuY2FsbChcbiAgICAgICAgICB0cmFuc2FjdGlvbi5iaW5kVG9UcmFuc2FjdGlvbihpc3N1ZXIpLFxuICAgICAgICAgIC4uLmFyZ3MsXG4gICAgICAgICAgY2JcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMuZ2V0TG9jaygpLnN1Ym1pdCh0cmFuc2FjdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgU2V0cyB0aGUgbG9jayB0byBiZSB1c2VkXG4gICAqIEBwYXJhbSBsb2NrXG4gICAqL1xuICBzdGF0aWMgc2V0TG9jayhsb2NrOiBUcmFuc2FjdGlvbkxvY2spIHtcbiAgICB0aGlzLmxvY2sgPSBsb2NrO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IGdldHMgdGhlIGxvY2tcbiAgICovXG4gIHN0YXRpYyBnZXRMb2NrKCk6IFRyYW5zYWN0aW9uTG9jayB7XG4gICAgaWYgKCF0aGlzLmxvY2spIHRoaXMubG9jayA9IG5ldyBTeW5jcm9ub3VzTG9jaygpO1xuICAgIHJldHVybiB0aGlzLmxvY2s7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgc3VibWl0cyBhIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqL1xuICBzdGF0aWMgc3VibWl0KHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbikge1xuICAgIHRoaXMuZ2V0TG9jaygpLnN1Ym1pdCh0cmFuc2FjdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgcmVsZWFzZXMgdGhlIGxvY2tcbiAgICogQHBhcmFtIHtFcnJ9IGVyclxuICAgKi9cbiAgc3RhdGljIGFzeW5jIHJlbGVhc2UoZXJyPzogRXJyb3IpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NrKCkucmVsZWFzZShlcnIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IHJldHJpZXZlcyB0aGUgbWV0YWRhdGEgZm9yIHRoZSB0cmFuc2FjdGlvblxuICAgKi9cbiAgZ2V0TWV0YWRhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0YWRhdGEgPyBbLi4udGhpcy5tZXRhZGF0YV0gOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgQmluZHMgYSBuZXcgb3BlcmF0aW9uIHRvIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb259IG5leHRUcmFuc2FjdGlvblxuICAgKi9cbiAgYmluZFRyYW5zYWN0aW9uKG5leHRUcmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pIHtcbiAgICAvLyBhbGwoYEJpbmRpbmcgdGhlIHswfSB0byB7MX1gLCBuZXh0VHJhbnNhY3Rpb24sIHRoaXMpO1xuICAgIHRoaXMubG9nLnB1c2goLi4ubmV4dFRyYW5zYWN0aW9uLmxvZyk7XG4gICAgbmV4dFRyYW5zYWN0aW9uLmJpbmRUcmFuc2FjdGlvbiA9IHRoaXMuYmluZFRvVHJhbnNhY3Rpb24uYmluZCh0aGlzKTtcbiAgICBuZXh0VHJhbnNhY3Rpb24uYmluZFRvVHJhbnNhY3Rpb24gPSB0aGlzLmJpbmRUb1RyYW5zYWN0aW9uLmJpbmQodGhpcyk7XG4gICAgdGhpcy5hY3Rpb24gPSBuZXh0VHJhbnNhY3Rpb24uYWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IEJpbmRzIHRoZSBUcmFuc2FjdGlvbmFsIERlY29yYXRlZCBPYmplY3QgdG8gdGhlIHRyYW5zYWN0aW9uXG4gICAqIEBkZXNjcmlwdGlvbiBieSBoYXZpbmcgYWxsIHtAbGluayB0cmFuc2FjdGlvbmFsfSBkZWNvcmF0ZWRcbiAgICogbWV0aG9kcyBhbHdheXMgcGFzcyB0aGUgY3VycmVudCBUcmFuc2FjdGlvbiBhcyBhbiBhcmd1bWVudFxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gb2JqXG4gICAqIEByZXR1cm4ge2FueX0gdGhlIGJvdW5kIHtAcGFyYW0gb2JqfVxuICAgKi9cbiAgYmluZFRvVHJhbnNhY3Rpb24ob2JqOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uYWxNZXRob2RzID0gZ2V0QWxsUHJvcGVydHlEZWNvcmF0b3JzUmVjdXJzaXZlKFxuICAgICAgb2JqLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgVHJhbnNhY3Rpb25hbEtleXMuUkVGTEVDVFxuICAgICk7XG4gICAgaWYgKCF0cmFuc2FjdGlvbmFsTWV0aG9kcykgcmV0dXJuIG9iajtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcbiAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgIGNvbnN0IGJvdW5kT2JqID0gZ2V0QWxsUHJvcGVydGllcyhvYmopLnJlZHVjZSgoYWNjdW06IGFueSwgazogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIE9iamVjdC5rZXlzKHRyYW5zYWN0aW9uYWxNZXRob2RzKS5pbmRleE9mKGspICE9PSAtMSAmJlxuICAgICAgICB0cmFuc2FjdGlvbmFsTWV0aG9kc1trXS5maW5kKFxuICAgICAgICAgIChvKSA9PiBvLmtleSA9PT0gVHJhbnNhY3Rpb25hbEtleXMuVFJBTlNBQ1RJT05BTFxuICAgICAgICApXG4gICAgICApXG4gICAgICAgIGFjY3VtW2tdID0gKC4uLmFyZ3M6IGFueVtdKSA9PlxuICAgICAgICAgIG9ialtrXS5jYWxsKG9iai5fX29yaWdpbmFsT2JqIHx8IG9iaiwgc2VsZiwgLi4uYXJncyk7XG4gICAgICBlbHNlIGlmIChrID09PSBcImNsYXp6XCIgfHwgayA9PT0gXCJjb25zdHJ1Y3RvclwiKSBhY2N1bVtrXSA9IG9ialtrXTtcbiAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmpba10gPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgYWNjdW1ba10gPSBvYmpba10uYmluZChvYmouX19vcmlnaW5hbE9iaiB8fCBvYmopO1xuICAgICAgZWxzZSBpZiAodHlwZW9mIG9ialtrXSA9PT0gXCJvYmplY3RcIiAmJiBvYmpba10uY29uc3RydWN0b3IpIHtcbiAgICAgICAgY29uc3QgZGVjcyA9IGdldENsYXNzRGVjb3JhdG9ycyhUcmFuc2FjdGlvbmFsS2V5cy5SRUZMRUNULCBvYmpba10pO1xuICAgICAgICBpZiAoZGVjcy5maW5kKChlKSA9PiBlLmtleSA9PT0gVHJhbnNhY3Rpb25hbEtleXMuVFJBTlNBQ1RJT05BTCkpXG4gICAgICAgICAgYWNjdW1ba10gPSBzZWxmLmJpbmRUb1RyYW5zYWN0aW9uKG9ialtrXSk7XG4gICAgICAgIGVsc2UgYWNjdW1ba10gPSBvYmpba107XG4gICAgICB9IGVsc2UgYWNjdW1ba10gPSBvYmpba107XG5cbiAgICAgIHJldHVybiBhY2N1bTtcbiAgICB9LCB7fSk7XG5cbiAgICBib3VuZE9ialtEQktleXMuT1JJR0lOQUxdID0gb2JqW0RCS2V5cy5PUklHSU5BTF0gfHwgb2JqO1xuICAgIGJvdW5kT2JqLnRvU3RyaW5nID0gKCkgPT5cbiAgICAgIGdldE9iamVjdE5hbWUoYm91bmRPYmpbREJLZXlzLk9SSUdJTkFMXSkgK1xuICAgICAgXCIgcHJveHkgZm9yIHRyYW5zYWN0aW9uIFwiICtcbiAgICAgIHRoaXMuaWQ7XG5cbiAgICByZXR1cm4gYm91bmRPYmo7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgRmlyZXMgdGhlIFRyYW5zYWN0aW9uXG4gICAqL1xuICBmaXJlKCkge1xuICAgIGlmICghdGhpcy5hY3Rpb24pIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyB0aGUgbWV0aG9kYCk7XG4gICAgcmV0dXJuIHRoaXMuYWN0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgdG9TdHJpbmcgb3ZlcnJpZGVcbiAgICogQHBhcmFtIHtib29sZWFufSBbd2l0aElkXSBkZWZhdWx0cyB0byB0cnVlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3dpdGhMb2ddIGRlZmF1bHRzIHRvIHRydWVcbiAgICovXG4gIHRvU3RyaW5nKHdpdGhJZCA9IHRydWUsIHdpdGhMb2cgPSBmYWxzZSkge1xuICAgIHJldHVybiBgJHt3aXRoSWQgPyBgWyR7dGhpcy5pZH1dYCA6IFwiXCJ9W1RyYW5zYWN0aW9uXVske3RoaXMuc291cmNlfS4ke3RoaXMubWV0aG9kfSR7XG4gICAgICB3aXRoTG9nID8gYF1cXG5UcmFuc2FjdGlvbiBMb2c6XFxuJHt0aGlzLmxvZy5qb2luKFwiXFxuXCIpfWAgOiBcIl1cIlxuICAgIH1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IGdldHMgdGhlIHRyYW5zYWN0aW9ucyByZWZsZWN0aW9ucyBrZXlcbiAgICogQGZ1bmN0aW9uIGdldFJlcG9LZXlcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKiBAbWVtYmVyT2YgbW9kdWxlOmRiLWRlY29yYXRvcnMuVHJhbnNhY3Rpb25zXG4gICAqICovXG4gIHN0YXRpYyBrZXkoa2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25hbEtleXMuUkVGTEVDVCArIGtleTtcbiAgfVxufVxuIl19
|
package/lib/Transaction.d.ts
CHANGED
|
@@ -76,4 +76,11 @@ export declare class Transaction {
|
|
|
76
76
|
* @param {boolean} [withLog] defaults to true
|
|
77
77
|
*/
|
|
78
78
|
toString(withId?: boolean, withLog?: boolean): string;
|
|
79
|
+
/**
|
|
80
|
+
* @summary gets the transactions reflections key
|
|
81
|
+
* @function getRepoKey
|
|
82
|
+
* @param {string} key
|
|
83
|
+
* @memberOf module:db-decorators.Transactions
|
|
84
|
+
* */
|
|
85
|
+
static key(key: string): string;
|
|
79
86
|
}
|
package/lib/constants.cjs
CHANGED
|
@@ -1 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TransactionalKeys = void 0;
|
|
4
|
+
exports.TransactionalKeys = {
|
|
5
|
+
REFLECT: "model.transactional.",
|
|
6
|
+
TRANSACTIONAL: "transactional",
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxpQkFBaUIsR0FBMkI7SUFDdkQsT0FBTyxFQUFFLHNCQUFzQjtJQUMvQixhQUFhLEVBQUUsZUFBZTtDQUMvQixDQUFDIiwiZmlsZSI6ImNvbnN0YW50cy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBUcmFuc2FjdGlvbmFsS2V5czogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgUkVGTEVDVDogXCJtb2RlbC50cmFuc2FjdGlvbmFsLlwiLFxuICBUUkFOU0FDVElPTkFMOiBcInRyYW5zYWN0aW9uYWxcIixcbn07XG4iXX0=
|
package/lib/decorators.cjs
CHANGED
|
@@ -1 +1,166 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.transactional = transactional;
|
|
4
|
+
exports.transactionalSuperCall = transactionalSuperCall;
|
|
5
|
+
const constants_1 = require("./constants.cjs");
|
|
6
|
+
const reflection_1 = require("@decaf-ts/reflection");
|
|
7
|
+
const Transaction_1 = require("./Transaction.cjs");
|
|
8
|
+
/**
|
|
9
|
+
* @summary Sets a class Async (promise based) method as transactional
|
|
10
|
+
*
|
|
11
|
+
* @param {any[]} [data] option metadata available to the {@link TransactionLock}
|
|
12
|
+
*
|
|
13
|
+
* @function transactionalPromise
|
|
14
|
+
*
|
|
15
|
+
* @memberOf module:db-decorators.Decorators.transactions
|
|
16
|
+
*/
|
|
17
|
+
function transactional(...data) {
|
|
18
|
+
return function (target, propertyKey, descriptor) {
|
|
19
|
+
(0, reflection_1.metadata)(Transaction_1.Transaction.key(constants_1.TransactionalKeys.TRANSACTIONAL), data)(target, propertyKey);
|
|
20
|
+
const originalMethod = descriptor.value;
|
|
21
|
+
const methodWrapper = function (...args) {
|
|
22
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
23
|
+
const self = this;
|
|
24
|
+
return new Promise((resolve, reject) => {
|
|
25
|
+
const cb = (err, result) => {
|
|
26
|
+
Transaction_1.Transaction.release(err).then(() => {
|
|
27
|
+
if (err)
|
|
28
|
+
return reject(err);
|
|
29
|
+
resolve(result);
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
let transaction = args.shift();
|
|
33
|
+
if (transaction instanceof Transaction_1.Transaction) {
|
|
34
|
+
const updatedTransaction = new Transaction_1.Transaction(this.constructor.name, propertyKey, async () => {
|
|
35
|
+
originalMethod
|
|
36
|
+
.call(updatedTransaction.bindToTransaction(self), ...args)
|
|
37
|
+
.then(resolve)
|
|
38
|
+
.catch(reject);
|
|
39
|
+
}, data.length ? data : undefined);
|
|
40
|
+
transaction.bindTransaction(updatedTransaction);
|
|
41
|
+
transaction.fire();
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
args.unshift(transaction);
|
|
45
|
+
transaction = undefined;
|
|
46
|
+
transaction = new Transaction_1.Transaction(this.constructor.name, propertyKey, () => {
|
|
47
|
+
originalMethod
|
|
48
|
+
.call(transaction.bindToTransaction(self), ...args)
|
|
49
|
+
.then((result) => cb(undefined, result))
|
|
50
|
+
.catch(cb);
|
|
51
|
+
}, data.length ? data : undefined);
|
|
52
|
+
Transaction_1.Transaction.submit(transaction);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
};
|
|
56
|
+
Object.defineProperty(methodWrapper, "name", {
|
|
57
|
+
value: propertyKey,
|
|
58
|
+
});
|
|
59
|
+
descriptor.value = methodWrapper;
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
//
|
|
63
|
+
// /**
|
|
64
|
+
// * @summary Sets a class Async method as transactional
|
|
65
|
+
// *
|
|
66
|
+
// * @param {any[]} [metadata] option metadata available to the {@link TransactionLock}
|
|
67
|
+
// *
|
|
68
|
+
// * @function transactionalAsync
|
|
69
|
+
// *
|
|
70
|
+
// * @memberOf module:db-decorators.Decorators.transactions
|
|
71
|
+
// */
|
|
72
|
+
// export function transactionalAsync(...metadata: any[]) {
|
|
73
|
+
// return function (
|
|
74
|
+
// target: any,
|
|
75
|
+
// propertyKey: string,
|
|
76
|
+
// descriptor: PropertyDescriptor,
|
|
77
|
+
// ) {
|
|
78
|
+
// metadasta(getTransactionalKey(TransactionalKeys.TRANSACTIONAL))
|
|
79
|
+
// Reflect.defineMetadata(
|
|
80
|
+
// ,
|
|
81
|
+
// {
|
|
82
|
+
// type: "async",
|
|
83
|
+
// metadata: metadata.length ? metadata : undefined,
|
|
84
|
+
// } as TransactionalMetadata,
|
|
85
|
+
// target,
|
|
86
|
+
// propertyKey,
|
|
87
|
+
// );
|
|
88
|
+
//
|
|
89
|
+
// const originalMethod = descriptor.value;
|
|
90
|
+
//
|
|
91
|
+
// const methodWrapper = function (this: any, ...args: any[]) {
|
|
92
|
+
// const callback: Callback = args.pop();
|
|
93
|
+
// if (!callback || typeof callback !== "function")
|
|
94
|
+
// throw new CriticalError(`Missing Callback`);
|
|
95
|
+
//
|
|
96
|
+
// const cb = (err?: Err, ...args: any[]) => {
|
|
97
|
+
// Transaction.release(err).then((_) => callback(err, ...args));
|
|
98
|
+
// };
|
|
99
|
+
//
|
|
100
|
+
// const self = this;
|
|
101
|
+
//
|
|
102
|
+
// let transaction = args.shift();
|
|
103
|
+
// if (transaction instanceof Transaction) {
|
|
104
|
+
// const updatedTransaction: Transaction = new Transaction(
|
|
105
|
+
// this.constructor.name,
|
|
106
|
+
// propertyKey,
|
|
107
|
+
// () => {
|
|
108
|
+
// try {
|
|
109
|
+
// return originalMethod.call(
|
|
110
|
+
// updatedTransaction.bindToTransaction(self),
|
|
111
|
+
// ...args,
|
|
112
|
+
// callback,
|
|
113
|
+
// );
|
|
114
|
+
// } catch (e: any) {
|
|
115
|
+
// return callback(e);
|
|
116
|
+
// }
|
|
117
|
+
// },
|
|
118
|
+
// metadata.length ? metadata : undefined,
|
|
119
|
+
// );
|
|
120
|
+
//
|
|
121
|
+
// transaction.bindTransaction(updatedTransaction);
|
|
122
|
+
// transaction.fire();
|
|
123
|
+
// } else {
|
|
124
|
+
// args.unshift(transaction);
|
|
125
|
+
// transaction = undefined;
|
|
126
|
+
// transaction = new Transaction(
|
|
127
|
+
// this.constructor.name,
|
|
128
|
+
// propertyKey,
|
|
129
|
+
// () => {
|
|
130
|
+
// try {
|
|
131
|
+
// return originalMethod.call(
|
|
132
|
+
// transaction.bindToTransaction(self),
|
|
133
|
+
// ...args,
|
|
134
|
+
// cb,
|
|
135
|
+
// );
|
|
136
|
+
// } catch (e: any) {
|
|
137
|
+
// return cb(e);
|
|
138
|
+
// }
|
|
139
|
+
// },
|
|
140
|
+
// metadata.length ? metadata : undefined,
|
|
141
|
+
// );
|
|
142
|
+
// Transaction.submit(transaction);
|
|
143
|
+
// }
|
|
144
|
+
// };
|
|
145
|
+
//
|
|
146
|
+
// Object.defineProperty(methodWrapper, "name", {
|
|
147
|
+
// value: propertyKey,
|
|
148
|
+
// });
|
|
149
|
+
// descriptor.value = methodWrapper;
|
|
150
|
+
// };
|
|
151
|
+
// }
|
|
152
|
+
/**
|
|
153
|
+
* @summary Util function to wrap super calls with the transaction when the super's method is also transactional
|
|
154
|
+
*
|
|
155
|
+
* @param {Function} method the super method (must be bound to the proper this), eg: super.create.bind(this)
|
|
156
|
+
* @param {any[]} args the arguments to call the method with
|
|
157
|
+
*
|
|
158
|
+
* @memberOf module:db-decorators.Transaction
|
|
159
|
+
*/
|
|
160
|
+
function transactionalSuperCall(method, ...args) {
|
|
161
|
+
const lock = Transaction_1.Transaction.getLock();
|
|
162
|
+
const currentTransaction = lock.currentTransaction;
|
|
163
|
+
method(currentTransaction, ...args);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,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QyxtQ0FBbUM7QUFDbkMseUJBQXlCO0FBQ3pCLG9CQUFvQjtBQUNwQixvQkFBb0I7QUFDcEIsNENBQTRDO0FBQzVDLHVEQUF1RDtBQUN2RCwyQkFBMkI7QUFDM0Isc0JBQXNCO0FBQ3RCLG1CQUFtQjtBQUNuQixpQ0FBaUM7QUFDakMsOEJBQThCO0FBQzlCLGdCQUFnQjtBQUNoQixlQUFlO0FBQ2Ysb0RBQW9EO0FBQ3BELGFBQWE7QUFDYiwyQ0FBMkM7QUFDM0MsVUFBVTtBQUNWLFNBQVM7QUFDVCxFQUFFO0FBQ0YscURBQXFEO0FBQ3JELDRCQUE0QjtBQUM1QixVQUFVO0FBQ1Ysd0NBQXdDO0FBQ3hDLE9BQU87QUFDUCxJQUFJO0FBRUo7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLHNCQUFzQixDQUFDLE1BQVcsRUFBRSxHQUFHLElBQVM7SUFDOUQsTUFBTSxJQUFJLEdBQUcseUJBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNuQyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNuRCxNQUFNLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUN0QyxDQUFDIiwiZmlsZSI6ImRlY29yYXRvcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUcmFuc2FjdGlvbmFsS2V5cyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgbWV0YWRhdGEgfSBmcm9tIFwiQGRlY2FmLXRzL3JlZmxlY3Rpb25cIjtcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSBcIi4vVHJhbnNhY3Rpb25cIjtcblxuLyoqXG4gKiBAc3VtbWFyeSBTZXRzIGEgY2xhc3MgQXN5bmMgKHByb21pc2UgYmFzZWQpIG1ldGhvZCBhcyB0cmFuc2FjdGlvbmFsXG4gKlxuICogQHBhcmFtIHthbnlbXX0gIFtkYXRhXSBvcHRpb24gbWV0YWRhdGEgYXZhaWxhYmxlIHRvIHRoZSB7QGxpbmsgVHJhbnNhY3Rpb25Mb2NrfVxuICpcbiAqIEBmdW5jdGlvbiB0cmFuc2FjdGlvbmFsUHJvbWlzZVxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGItZGVjb3JhdG9ycy5EZWNvcmF0b3JzLnRyYW5zYWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNhY3Rpb25hbCguLi5kYXRhOiBhbnlbXSkge1xuICByZXR1cm4gZnVuY3Rpb24gKFxuICAgIHRhcmdldDogYW55LFxuICAgIHByb3BlcnR5S2V5OiBzdHJpbmcsXG4gICAgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yXG4gICkge1xuICAgIG1ldGFkYXRhKFRyYW5zYWN0aW9uLmtleShUcmFuc2FjdGlvbmFsS2V5cy5UUkFOU0FDVElPTkFMKSwgZGF0YSkoXG4gICAgICB0YXJnZXQsXG4gICAgICBwcm9wZXJ0eUtleVxuICAgICk7XG5cbiAgICBjb25zdCBvcmlnaW5hbE1ldGhvZCA9IGRlc2NyaXB0b3IudmFsdWU7XG5cbiAgICBjb25zdCBtZXRob2RXcmFwcGVyID0gZnVuY3Rpb24gKHRoaXM6IGFueSwgLi4uYXJnczogYW55W10pOiBQcm9taXNlPGFueT4ge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgY2IgPSAoZXJyPzogRXJyb3IsIHJlc3VsdD86IGFueSkgPT4ge1xuICAgICAgICAgIFRyYW5zYWN0aW9uLnJlbGVhc2UoZXJyKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBsZXQgdHJhbnNhY3Rpb24gPSBhcmdzLnNoaWZ0KCk7XG4gICAgICAgIGlmICh0cmFuc2FjdGlvbiBpbnN0YW5jZW9mIFRyYW5zYWN0aW9uKSB7XG4gICAgICAgICAgY29uc3QgdXBkYXRlZFRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbihcbiAgICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IubmFtZSxcbiAgICAgICAgICAgIHByb3BlcnR5S2V5LFxuICAgICAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICBvcmlnaW5hbE1ldGhvZFxuICAgICAgICAgICAgICAgIC5jYWxsKHVwZGF0ZWRUcmFuc2FjdGlvbi5iaW5kVG9UcmFuc2FjdGlvbihzZWxmKSwgLi4uYXJncylcbiAgICAgICAgICAgICAgICAudGhlbihyZXNvbHZlKVxuICAgICAgICAgICAgICAgIC5jYXRjaChyZWplY3QpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGEubGVuZ3RoID8gZGF0YSA6IHVuZGVmaW5lZFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB0cmFuc2FjdGlvbi5iaW5kVHJhbnNhY3Rpb24odXBkYXRlZFRyYW5zYWN0aW9uKTtcbiAgICAgICAgICB0cmFuc2FjdGlvbi5maXJlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXJncy51bnNoaWZ0KHRyYW5zYWN0aW9uKTtcbiAgICAgICAgICB0cmFuc2FjdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB0cmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbihcbiAgICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IubmFtZSxcbiAgICAgICAgICAgIHByb3BlcnR5S2V5LFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICBvcmlnaW5hbE1ldGhvZFxuICAgICAgICAgICAgICAgIC5jYWxsKHRyYW5zYWN0aW9uLmJpbmRUb1RyYW5zYWN0aW9uKHNlbGYpLCAuLi5hcmdzKVxuICAgICAgICAgICAgICAgIC50aGVuKChyZXN1bHQ6IGFueSkgPT4gY2IodW5kZWZpbmVkLCByZXN1bHQpKVxuICAgICAgICAgICAgICAgIC5jYXRjaChjYik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0YS5sZW5ndGggPyBkYXRhIDogdW5kZWZpbmVkXG4gICAgICAgICAgKTtcbiAgICAgICAgICBUcmFuc2FjdGlvbi5zdWJtaXQodHJhbnNhY3Rpb24pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG1ldGhvZFdyYXBwZXIsIFwibmFtZVwiLCB7XG4gICAgICB2YWx1ZTogcHJvcGVydHlLZXksXG4gICAgfSk7XG4gICAgZGVzY3JpcHRvci52YWx1ZSA9IG1ldGhvZFdyYXBwZXI7XG4gIH07XG59XG4vL1xuLy8gLyoqXG4vLyAgKiBAc3VtbWFyeSBTZXRzIGEgY2xhc3MgQXN5bmMgbWV0aG9kIGFzIHRyYW5zYWN0aW9uYWxcbi8vICAqXG4vLyAgKiBAcGFyYW0ge2FueVtdfSAgW21ldGFkYXRhXSBvcHRpb24gbWV0YWRhdGEgYXZhaWxhYmxlIHRvIHRoZSB7QGxpbmsgVHJhbnNhY3Rpb25Mb2NrfVxuLy8gICpcbi8vICAqIEBmdW5jdGlvbiB0cmFuc2FjdGlvbmFsQXN5bmNcbi8vICAqXG4vLyAgKiBAbWVtYmVyT2YgbW9kdWxlOmRiLWRlY29yYXRvcnMuRGVjb3JhdG9ycy50cmFuc2FjdGlvbnNcbi8vICAqL1xuLy8gZXhwb3J0IGZ1bmN0aW9uIHRyYW5zYWN0aW9uYWxBc3luYyguLi5tZXRhZGF0YTogYW55W10pIHtcbi8vICAgcmV0dXJuIGZ1bmN0aW9uIChcbi8vICAgICB0YXJnZXQ6IGFueSxcbi8vICAgICBwcm9wZXJ0eUtleTogc3RyaW5nLFxuLy8gICAgIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcixcbi8vICAgKSB7XG4vLyAgICAgbWV0YWRhc3RhKGdldFRyYW5zYWN0aW9uYWxLZXkoVHJhbnNhY3Rpb25hbEtleXMuVFJBTlNBQ1RJT05BTCkpXG4vLyAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShcbi8vICAgICAgICxcbi8vICAgICAgIHtcbi8vICAgICAgICAgdHlwZTogXCJhc3luY1wiLFxuLy8gICAgICAgICBtZXRhZGF0YTogbWV0YWRhdGEubGVuZ3RoID8gbWV0YWRhdGEgOiB1bmRlZmluZWQsXG4vLyAgICAgICB9IGFzIFRyYW5zYWN0aW9uYWxNZXRhZGF0YSxcbi8vICAgICAgIHRhcmdldCxcbi8vICAgICAgIHByb3BlcnR5S2V5LFxuLy8gICAgICk7XG4vL1xuLy8gICAgIGNvbnN0IG9yaWdpbmFsTWV0aG9kID0gZGVzY3JpcHRvci52YWx1ZTtcbi8vXG4vLyAgICAgY29uc3QgbWV0aG9kV3JhcHBlciA9IGZ1bmN0aW9uICh0aGlzOiBhbnksIC4uLmFyZ3M6IGFueVtdKSB7XG4vLyAgICAgICBjb25zdCBjYWxsYmFjazogQ2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuLy8gICAgICAgaWYgKCFjYWxsYmFjayB8fCB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIilcbi8vICAgICAgICAgdGhyb3cgbmV3IENyaXRpY2FsRXJyb3IoYE1pc3NpbmcgQ2FsbGJhY2tgKTtcbi8vXG4vLyAgICAgICBjb25zdCBjYiA9IChlcnI/OiBFcnIsIC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4vLyAgICAgICAgIFRyYW5zYWN0aW9uLnJlbGVhc2UoZXJyKS50aGVuKChfKSA9PiBjYWxsYmFjayhlcnIsIC4uLmFyZ3MpKTtcbi8vICAgICAgIH07XG4vL1xuLy8gICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4vL1xuLy8gICAgICAgbGV0IHRyYW5zYWN0aW9uID0gYXJncy5zaGlmdCgpO1xuLy8gICAgICAgaWYgKHRyYW5zYWN0aW9uIGluc3RhbmNlb2YgVHJhbnNhY3Rpb24pIHtcbi8vICAgICAgICAgY29uc3QgdXBkYXRlZFRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbihcbi8vICAgICAgICAgICB0aGlzLmNvbnN0cnVjdG9yLm5hbWUsXG4vLyAgICAgICAgICAgcHJvcGVydHlLZXksXG4vLyAgICAgICAgICAgKCkgPT4ge1xuLy8gICAgICAgICAgICAgdHJ5IHtcbi8vICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsTWV0aG9kLmNhbGwoXG4vLyAgICAgICAgICAgICAgICAgdXBkYXRlZFRyYW5zYWN0aW9uLmJpbmRUb1RyYW5zYWN0aW9uKHNlbGYpLFxuLy8gICAgICAgICAgICAgICAgIC4uLmFyZ3MsXG4vLyAgICAgICAgICAgICAgICAgY2FsbGJhY2ssXG4vLyAgICAgICAgICAgICAgICk7XG4vLyAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbi8vICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGUpO1xuLy8gICAgICAgICAgICAgfVxuLy8gICAgICAgICAgIH0sXG4vLyAgICAgICAgICAgbWV0YWRhdGEubGVuZ3RoID8gbWV0YWRhdGEgOiB1bmRlZmluZWQsXG4vLyAgICAgICAgICk7XG4vL1xuLy8gICAgICAgICB0cmFuc2FjdGlvbi5iaW5kVHJhbnNhY3Rpb24odXBkYXRlZFRyYW5zYWN0aW9uKTtcbi8vICAgICAgICAgdHJhbnNhY3Rpb24uZmlyZSgpO1xuLy8gICAgICAgfSBlbHNlIHtcbi8vICAgICAgICAgYXJncy51bnNoaWZ0KHRyYW5zYWN0aW9uKTtcbi8vICAgICAgICAgdHJhbnNhY3Rpb24gPSB1bmRlZmluZWQ7XG4vLyAgICAgICAgIHRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKFxuLy8gICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IubmFtZSxcbi8vICAgICAgICAgICBwcm9wZXJ0eUtleSxcbi8vICAgICAgICAgICAoKSA9PiB7XG4vLyAgICAgICAgICAgICB0cnkge1xuLy8gICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxNZXRob2QuY2FsbChcbi8vICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi5iaW5kVG9UcmFuc2FjdGlvbihzZWxmKSxcbi8vICAgICAgICAgICAgICAgICAuLi5hcmdzLFxuLy8gICAgICAgICAgICAgICAgIGNiLFxuLy8gICAgICAgICAgICAgICApO1xuLy8gICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4vLyAgICAgICAgICAgICAgIHJldHVybiBjYihlKTtcbi8vICAgICAgICAgICAgIH1cbi8vICAgICAgICAgICB9LFxuLy8gICAgICAgICAgIG1ldGFkYXRhLmxlbmd0aCA/IG1ldGFkYXRhIDogdW5kZWZpbmVkLFxuLy8gICAgICAgICApO1xuLy8gICAgICAgICBUcmFuc2FjdGlvbi5zdWJtaXQodHJhbnNhY3Rpb24pO1xuLy8gICAgICAgfVxuLy8gICAgIH07XG4vL1xuLy8gICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXRob2RXcmFwcGVyLCBcIm5hbWVcIiwge1xuLy8gICAgICAgdmFsdWU6IHByb3BlcnR5S2V5LFxuLy8gICAgIH0pO1xuLy8gICAgIGRlc2NyaXB0b3IudmFsdWUgPSBtZXRob2RXcmFwcGVyO1xuLy8gICB9O1xuLy8gfVxuXG4vKipcbiAqIEBzdW1tYXJ5IFV0aWwgZnVuY3Rpb24gdG8gd3JhcCBzdXBlciBjYWxscyB3aXRoIHRoZSB0cmFuc2FjdGlvbiB3aGVuIHRoZSBzdXBlcidzIG1ldGhvZCBpcyBhbHNvIHRyYW5zYWN0aW9uYWxcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBtZXRob2QgdGhlIHN1cGVyIG1ldGhvZCAobXVzdCBiZSBib3VuZCB0byB0aGUgcHJvcGVyIHRoaXMpLCBlZzogc3VwZXIuY3JlYXRlLmJpbmQodGhpcylcbiAqIEBwYXJhbSB7YW55W119IGFyZ3MgdGhlIGFyZ3VtZW50cyB0byBjYWxsIHRoZSBtZXRob2Qgd2l0aFxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGItZGVjb3JhdG9ycy5UcmFuc2FjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNhY3Rpb25hbFN1cGVyQ2FsbChtZXRob2Q6IGFueSwgLi4uYXJnczogYW55KSB7XG4gIGNvbnN0IGxvY2sgPSBUcmFuc2FjdGlvbi5nZXRMb2NrKCk7XG4gIGNvbnN0IGN1cnJlbnRUcmFuc2FjdGlvbiA9IGxvY2suY3VycmVudFRyYW5zYWN0aW9uO1xuICBtZXRob2QoY3VycmVudFRyYW5zYWN0aW9uLCAuLi5hcmdzKTtcbn1cbiJdfQ==
|
package/lib/decorators.d.ts
CHANGED
|
@@ -1,10 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @summary gets the transactions reflections key
|
|
3
|
-
* @function getRepoKey
|
|
4
|
-
* @param {string} key
|
|
5
|
-
* @memberOf module:db-decorators.Transactions
|
|
6
|
-
* */
|
|
7
|
-
export declare const getTransactionalKey: (key: string) => string;
|
|
8
1
|
/**
|
|
9
2
|
* @summary Sets a class Async (promise based) method as transactional
|
|
10
3
|
*
|
package/lib/esm/Transaction.d.ts
CHANGED
|
@@ -76,4 +76,11 @@ export declare class Transaction {
|
|
|
76
76
|
* @param {boolean} [withLog] defaults to true
|
|
77
77
|
*/
|
|
78
78
|
toString(withId?: boolean, withLog?: boolean): string;
|
|
79
|
+
/**
|
|
80
|
+
* @summary gets the transactions reflections key
|
|
81
|
+
* @function getRepoKey
|
|
82
|
+
* @param {string} key
|
|
83
|
+
* @memberOf module:db-decorators.Transactions
|
|
84
|
+
* */
|
|
85
|
+
static key(key: string): string;
|
|
79
86
|
}
|
package/lib/esm/Transaction.js
CHANGED
|
@@ -1,3 +1,148 @@
|
|
|
1
|
-
import{getAllProperties,getClassDecorators}from"@decaf-ts/reflection";
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { getAllProperties, getClassDecorators } from "@decaf-ts/reflection";
|
|
2
|
+
import { SyncronousLock } from "./locks/SyncronousLock";
|
|
3
|
+
import { DBKeys, getAllPropertyDecoratorsRecursive, } from "@decaf-ts/db-decorators";
|
|
4
|
+
import { getObjectName } from "./utils";
|
|
5
|
+
import { TransactionalKeys } from "./constants";
|
|
6
|
+
export class Transaction {
|
|
7
|
+
constructor(source, method, action, metadata) {
|
|
8
|
+
this.id = Date.now();
|
|
9
|
+
this.action = action;
|
|
10
|
+
this.method = method;
|
|
11
|
+
this.log = [[this.id, source, method].join(" | ")];
|
|
12
|
+
this.source = source;
|
|
13
|
+
this.metadata = metadata;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* @summary Pushes a transaction to que queue and waits its resolution
|
|
17
|
+
*
|
|
18
|
+
* @param {any} issuer any class. will be used as this when calling the callbackMethod
|
|
19
|
+
* @param {Function} callbackMethod callback function containing the transaction. will be called with the issuear as this
|
|
20
|
+
* @param {any[]} args arguments to pass to the method. Last one must be the callback
|
|
21
|
+
*/
|
|
22
|
+
static push(issuer, callbackMethod, ...args) {
|
|
23
|
+
const callback = args.pop();
|
|
24
|
+
if (!callback || typeof callback !== "function")
|
|
25
|
+
throw new Error("Missing callback");
|
|
26
|
+
const cb = (err, ...args) => {
|
|
27
|
+
this.getLock()
|
|
28
|
+
.release(err)
|
|
29
|
+
.then(() => callback(err, ...args));
|
|
30
|
+
};
|
|
31
|
+
const transaction = new Transaction(issuer.constructor.name, callbackMethod.name ? getObjectName(callbackMethod) : "Anonymous", () => {
|
|
32
|
+
return callbackMethod.call(transaction.bindToTransaction(issuer), ...args, cb);
|
|
33
|
+
});
|
|
34
|
+
this.getLock().submit(transaction);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* @summary Sets the lock to be used
|
|
38
|
+
* @param lock
|
|
39
|
+
*/
|
|
40
|
+
static setLock(lock) {
|
|
41
|
+
this.lock = lock;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* @summary gets the lock
|
|
45
|
+
*/
|
|
46
|
+
static getLock() {
|
|
47
|
+
if (!this.lock)
|
|
48
|
+
this.lock = new SyncronousLock();
|
|
49
|
+
return this.lock;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* @summary submits a transaction
|
|
53
|
+
* @param {Transaction} transaction
|
|
54
|
+
*/
|
|
55
|
+
static submit(transaction) {
|
|
56
|
+
this.getLock().submit(transaction);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* @summary releases the lock
|
|
60
|
+
* @param {Err} err
|
|
61
|
+
*/
|
|
62
|
+
static async release(err) {
|
|
63
|
+
return this.getLock().release(err);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* @summary retrieves the metadata for the transaction
|
|
67
|
+
*/
|
|
68
|
+
getMetadata() {
|
|
69
|
+
return this.metadata ? [...this.metadata] : undefined;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* @summary Binds a new operation to the current transaction
|
|
73
|
+
* @param {Transaction} nextTransaction
|
|
74
|
+
*/
|
|
75
|
+
bindTransaction(nextTransaction) {
|
|
76
|
+
// all(`Binding the {0} to {1}`, nextTransaction, this);
|
|
77
|
+
this.log.push(...nextTransaction.log);
|
|
78
|
+
nextTransaction.bindTransaction = this.bindToTransaction.bind(this);
|
|
79
|
+
nextTransaction.bindToTransaction = this.bindToTransaction.bind(this);
|
|
80
|
+
this.action = nextTransaction.action;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* @summary Binds the Transactional Decorated Object to the transaction
|
|
84
|
+
* @description by having all {@link transactional} decorated
|
|
85
|
+
* methods always pass the current Transaction as an argument
|
|
86
|
+
*
|
|
87
|
+
* @param {any} obj
|
|
88
|
+
* @return {any} the bound {@param obj}
|
|
89
|
+
*/
|
|
90
|
+
bindToTransaction(obj) {
|
|
91
|
+
const transactionalMethods = getAllPropertyDecoratorsRecursive(obj, undefined, TransactionalKeys.REFLECT);
|
|
92
|
+
if (!transactionalMethods)
|
|
93
|
+
return obj;
|
|
94
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
95
|
+
const self = this;
|
|
96
|
+
const boundObj = getAllProperties(obj).reduce((accum, k) => {
|
|
97
|
+
if (Object.keys(transactionalMethods).indexOf(k) !== -1 &&
|
|
98
|
+
transactionalMethods[k].find((o) => o.key === TransactionalKeys.TRANSACTIONAL))
|
|
99
|
+
accum[k] = (...args) => obj[k].call(obj.__originalObj || obj, self, ...args);
|
|
100
|
+
else if (k === "clazz" || k === "constructor")
|
|
101
|
+
accum[k] = obj[k];
|
|
102
|
+
else if (typeof obj[k] === "function")
|
|
103
|
+
accum[k] = obj[k].bind(obj.__originalObj || obj);
|
|
104
|
+
else if (typeof obj[k] === "object" && obj[k].constructor) {
|
|
105
|
+
const decs = getClassDecorators(TransactionalKeys.REFLECT, obj[k]);
|
|
106
|
+
if (decs.find((e) => e.key === TransactionalKeys.TRANSACTIONAL))
|
|
107
|
+
accum[k] = self.bindToTransaction(obj[k]);
|
|
108
|
+
else
|
|
109
|
+
accum[k] = obj[k];
|
|
110
|
+
}
|
|
111
|
+
else
|
|
112
|
+
accum[k] = obj[k];
|
|
113
|
+
return accum;
|
|
114
|
+
}, {});
|
|
115
|
+
boundObj[DBKeys.ORIGINAL] = obj[DBKeys.ORIGINAL] || obj;
|
|
116
|
+
boundObj.toString = () => getObjectName(boundObj[DBKeys.ORIGINAL]) +
|
|
117
|
+
" proxy for transaction " +
|
|
118
|
+
this.id;
|
|
119
|
+
return boundObj;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* @summary Fires the Transaction
|
|
123
|
+
*/
|
|
124
|
+
fire() {
|
|
125
|
+
if (!this.action)
|
|
126
|
+
throw new Error(`Missing the method`);
|
|
127
|
+
return this.action();
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* @summary toString override
|
|
131
|
+
* @param {boolean} [withId] defaults to true
|
|
132
|
+
* @param {boolean} [withLog] defaults to true
|
|
133
|
+
*/
|
|
134
|
+
toString(withId = true, withLog = false) {
|
|
135
|
+
return `${withId ? `[${this.id}]` : ""}[Transaction][${this.source}.${this.method}${withLog ? `]\nTransaction Log:\n${this.log.join("\n")}` : "]"}`;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* @summary gets the transactions reflections key
|
|
139
|
+
* @function getRepoKey
|
|
140
|
+
* @param {string} key
|
|
141
|
+
* @memberOf module:db-decorators.Transactions
|
|
142
|
+
* */
|
|
143
|
+
static key(key) {
|
|
144
|
+
return TransactionalKeys.REFLECT + key;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,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Q0wsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFXO1FBQ3BCLE9BQU8saUJBQWlCLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztJQUN6QyxDQUFDO0NBQ0YiLCJmaWxlIjoiVHJhbnNhY3Rpb24uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBzdW1tYXJ5IFRyYW5zYWN0aW9uIENsYXNzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZVxuICogQHBhcmFtIHtzdHJpbmd9IFttZXRob2RdXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKCk6IHZvaWR9IFthY3Rpb25dXG4gKiBAcGFyYW0ge2FueVtdfSBbbWV0YWRhdGFdXG4gKlxuICogQGNsYXNzIFRyYW5zYWN0aW9uXG4gKlxuICogQGNhdGVnb3J5IFRyYW5zYWN0aW9uc1xuICovXG5pbXBvcnQgeyBUcmFuc2FjdGlvbkxvY2sgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL1RyYW5zYWN0aW9uTG9ja1wiO1xuaW1wb3J0IHsgZ2V0QWxsUHJvcGVydGllcywgZ2V0Q2xhc3NEZWNvcmF0b3JzIH0gZnJvbSBcIkBkZWNhZi10cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBDYWxsYmFjayB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBTeW5jcm9ub3VzTG9jayB9IGZyb20gXCIuL2xvY2tzL1N5bmNyb25vdXNMb2NrXCI7XG5pbXBvcnQge1xuICBEQktleXMsXG4gIGdldEFsbFByb3BlcnR5RGVjb3JhdG9yc1JlY3Vyc2l2ZSxcbn0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBnZXRPYmplY3ROYW1lIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7IFRyYW5zYWN0aW9uYWxLZXlzIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbiB7XG4gIHJlYWRvbmx5IGlkOiBudW1iZXI7XG4gIHByb3RlY3RlZCBhY3Rpb24/OiAoKSA9PiBhbnk7XG4gIHJlYWRvbmx5IG1ldGhvZD86IHN0cmluZztcbiAgcmVhZG9ubHkgc291cmNlPzogc3RyaW5nO1xuICByZWFkb25seSBsb2c6IHN0cmluZ1tdO1xuICBwcml2YXRlIHJlYWRvbmx5IG1ldGFkYXRhPzogYW55W107XG5cbiAgcHJpdmF0ZSBzdGF0aWMgbG9jazogVHJhbnNhY3Rpb25Mb2NrO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNvdXJjZTogc3RyaW5nLFxuICAgIG1ldGhvZD86IHN0cmluZyxcbiAgICBhY3Rpb24/OiAoKSA9PiBhbnksXG4gICAgbWV0YWRhdGE/OiBhbnlbXVxuICApIHtcbiAgICB0aGlzLmlkID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLmFjdGlvbiA9IGFjdGlvbjtcbiAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZDtcbiAgICB0aGlzLmxvZyA9IFtbdGhpcy5pZCwgc291cmNlLCBtZXRob2RdLmpvaW4oXCIgfCBcIildO1xuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICAgIHRoaXMubWV0YWRhdGEgPSBtZXRhZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBQdXNoZXMgYSB0cmFuc2FjdGlvbiB0byBxdWUgcXVldWUgYW5kIHdhaXRzIGl0cyByZXNvbHV0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSBpc3N1ZXIgYW55IGNsYXNzLiB3aWxsIGJlIHVzZWQgYXMgdGhpcyB3aGVuIGNhbGxpbmcgdGhlIGNhbGxiYWNrTWV0aG9kXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrTWV0aG9kIGNhbGxiYWNrIGZ1bmN0aW9uIGNvbnRhaW5pbmcgdGhlIHRyYW5zYWN0aW9uLiB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBpc3N1ZWFyIGFzIHRoaXNcbiAgICogQHBhcmFtIHthbnlbXX0gYXJncyBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgbWV0aG9kLiBMYXN0IG9uZSBtdXN0IGJlIHRoZSBjYWxsYmFja1xuICAgKi9cbiAgc3RhdGljIHB1c2goXG4gICAgaXNzdWVyOiBhbnksXG4gICAgY2FsbGJhY2tNZXRob2Q6ICguLi5hcmd6ejogKGFueSB8IENhbGxiYWNrKVtdKSA9PiB2b2lkLFxuICAgIC4uLmFyZ3M6IChhbnkgfCBDYWxsYmFjaylbXVxuICApIHtcbiAgICBjb25zdCBjYWxsYmFjazogQ2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgIGlmICghY2FsbGJhY2sgfHwgdHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIGNhbGxiYWNrXCIpO1xuICAgIGNvbnN0IGNiID0gKGVycj86IEVycm9yLCAuLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgICAgdGhpcy5nZXRMb2NrKClcbiAgICAgICAgLnJlbGVhc2UoZXJyKVxuICAgICAgICAudGhlbigoKSA9PiBjYWxsYmFjayhlcnIsIC4uLmFyZ3MpKTtcbiAgICB9O1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbihcbiAgICAgIGlzc3Vlci5jb25zdHJ1Y3Rvci5uYW1lLFxuICAgICAgY2FsbGJhY2tNZXRob2QubmFtZSA/IGdldE9iamVjdE5hbWUoY2FsbGJhY2tNZXRob2QpIDogXCJBbm9ueW1vdXNcIixcbiAgICAgICgpID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrTWV0aG9kLmNhbGwoXG4gICAgICAgICAgdHJhbnNhY3Rpb24uYmluZFRvVHJhbnNhY3Rpb24oaXNzdWVyKSxcbiAgICAgICAgICAuLi5hcmdzLFxuICAgICAgICAgIGNiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLmdldExvY2soKS5zdWJtaXQodHJhbnNhY3Rpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFNldHMgdGhlIGxvY2sgdG8gYmUgdXNlZFxuICAgKiBAcGFyYW0gbG9ja1xuICAgKi9cbiAgc3RhdGljIHNldExvY2sobG9jazogVHJhbnNhY3Rpb25Mb2NrKSB7XG4gICAgdGhpcy5sb2NrID0gbG9jaztcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBnZXRzIHRoZSBsb2NrXG4gICAqL1xuICBzdGF0aWMgZ2V0TG9jaygpOiBUcmFuc2FjdGlvbkxvY2sge1xuICAgIGlmICghdGhpcy5sb2NrKSB0aGlzLmxvY2sgPSBuZXcgU3luY3Jvbm91c0xvY2soKTtcbiAgICByZXR1cm4gdGhpcy5sb2NrO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IHN1Ym1pdHMgYSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKi9cbiAgc3RhdGljIHN1Ym1pdCh0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pIHtcbiAgICB0aGlzLmdldExvY2soKS5zdWJtaXQodHJhbnNhY3Rpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IHJlbGVhc2VzIHRoZSBsb2NrXG4gICAqIEBwYXJhbSB7RXJyfSBlcnJcbiAgICovXG4gIHN0YXRpYyBhc3luYyByZWxlYXNlKGVycj86IEVycm9yKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jaygpLnJlbGVhc2UoZXJyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSByZXRyaWV2ZXMgdGhlIG1ldGFkYXRhIGZvciB0aGUgdHJhbnNhY3Rpb25cbiAgICovXG4gIGdldE1ldGFkYXRhKCkge1xuICAgIHJldHVybiB0aGlzLm1ldGFkYXRhID8gWy4uLnRoaXMubWV0YWRhdGFdIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IEJpbmRzIGEgbmV3IG9wZXJhdGlvbiB0byB0aGUgY3VycmVudCB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9ufSBuZXh0VHJhbnNhY3Rpb25cbiAgICovXG4gIGJpbmRUcmFuc2FjdGlvbihuZXh0VHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKSB7XG4gICAgLy8gYWxsKGBCaW5kaW5nIHRoZSB7MH0gdG8gezF9YCwgbmV4dFRyYW5zYWN0aW9uLCB0aGlzKTtcbiAgICB0aGlzLmxvZy5wdXNoKC4uLm5leHRUcmFuc2FjdGlvbi5sb2cpO1xuICAgIG5leHRUcmFuc2FjdGlvbi5iaW5kVHJhbnNhY3Rpb24gPSB0aGlzLmJpbmRUb1RyYW5zYWN0aW9uLmJpbmQodGhpcyk7XG4gICAgbmV4dFRyYW5zYWN0aW9uLmJpbmRUb1RyYW5zYWN0aW9uID0gdGhpcy5iaW5kVG9UcmFuc2FjdGlvbi5iaW5kKHRoaXMpO1xuICAgIHRoaXMuYWN0aW9uID0gbmV4dFRyYW5zYWN0aW9uLmFjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBCaW5kcyB0aGUgVHJhbnNhY3Rpb25hbCBEZWNvcmF0ZWQgT2JqZWN0IHRvIHRoZSB0cmFuc2FjdGlvblxuICAgKiBAZGVzY3JpcHRpb24gYnkgaGF2aW5nIGFsbCB7QGxpbmsgdHJhbnNhY3Rpb25hbH0gZGVjb3JhdGVkXG4gICAqIG1ldGhvZHMgYWx3YXlzIHBhc3MgdGhlIGN1cnJlbnQgVHJhbnNhY3Rpb24gYXMgYW4gYXJndW1lbnRcbiAgICpcbiAgICogQHBhcmFtIHthbnl9IG9ialxuICAgKiBAcmV0dXJuIHthbnl9IHRoZSBib3VuZCB7QHBhcmFtIG9ian1cbiAgICovXG4gIGJpbmRUb1RyYW5zYWN0aW9uKG9iajogYW55KTogYW55IHtcbiAgICBjb25zdCB0cmFuc2FjdGlvbmFsTWV0aG9kcyA9IGdldEFsbFByb3BlcnR5RGVjb3JhdG9yc1JlY3Vyc2l2ZShcbiAgICAgIG9iaixcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIFRyYW5zYWN0aW9uYWxLZXlzLlJFRkxFQ1RcbiAgICApO1xuICAgIGlmICghdHJhbnNhY3Rpb25hbE1ldGhvZHMpIHJldHVybiBvYmo7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICBjb25zdCBib3VuZE9iaiA9IGdldEFsbFByb3BlcnRpZXMob2JqKS5yZWR1Y2UoKGFjY3VtOiBhbnksIGs6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBPYmplY3Qua2V5cyh0cmFuc2FjdGlvbmFsTWV0aG9kcykuaW5kZXhPZihrKSAhPT0gLTEgJiZcbiAgICAgICAgdHJhbnNhY3Rpb25hbE1ldGhvZHNba10uZmluZChcbiAgICAgICAgICAobykgPT4gby5rZXkgPT09IFRyYW5zYWN0aW9uYWxLZXlzLlRSQU5TQUNUSU9OQUxcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgICBhY2N1bVtrXSA9ICguLi5hcmdzOiBhbnlbXSkgPT5cbiAgICAgICAgICBvYmpba10uY2FsbChvYmouX19vcmlnaW5hbE9iaiB8fCBvYmosIHNlbGYsIC4uLmFyZ3MpO1xuICAgICAgZWxzZSBpZiAoayA9PT0gXCJjbGF6elwiIHx8IGsgPT09IFwiY29uc3RydWN0b3JcIikgYWNjdW1ba10gPSBvYmpba107XG4gICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqW2tdID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGFjY3VtW2tdID0gb2JqW2tdLmJpbmQob2JqLl9fb3JpZ2luYWxPYmogfHwgb2JqKTtcbiAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmpba10gPT09IFwib2JqZWN0XCIgJiYgb2JqW2tdLmNvbnN0cnVjdG9yKSB7XG4gICAgICAgIGNvbnN0IGRlY3MgPSBnZXRDbGFzc0RlY29yYXRvcnMoVHJhbnNhY3Rpb25hbEtleXMuUkVGTEVDVCwgb2JqW2tdKTtcbiAgICAgICAgaWYgKGRlY3MuZmluZCgoZSkgPT4gZS5rZXkgPT09IFRyYW5zYWN0aW9uYWxLZXlzLlRSQU5TQUNUSU9OQUwpKVxuICAgICAgICAgIGFjY3VtW2tdID0gc2VsZi5iaW5kVG9UcmFuc2FjdGlvbihvYmpba10pO1xuICAgICAgICBlbHNlIGFjY3VtW2tdID0gb2JqW2tdO1xuICAgICAgfSBlbHNlIGFjY3VtW2tdID0gb2JqW2tdO1xuXG4gICAgICByZXR1cm4gYWNjdW07XG4gICAgfSwge30pO1xuXG4gICAgYm91bmRPYmpbREJLZXlzLk9SSUdJTkFMXSA9IG9ialtEQktleXMuT1JJR0lOQUxdIHx8IG9iajtcbiAgICBib3VuZE9iai50b1N0cmluZyA9ICgpID0+XG4gICAgICBnZXRPYmplY3ROYW1lKGJvdW5kT2JqW0RCS2V5cy5PUklHSU5BTF0pICtcbiAgICAgIFwiIHByb3h5IGZvciB0cmFuc2FjdGlvbiBcIiArXG4gICAgICB0aGlzLmlkO1xuXG4gICAgcmV0dXJuIGJvdW5kT2JqO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IEZpcmVzIHRoZSBUcmFuc2FjdGlvblxuICAgKi9cbiAgZmlyZSgpIHtcbiAgICBpZiAoIXRoaXMuYWN0aW9uKSB0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgdGhlIG1ldGhvZGApO1xuICAgIHJldHVybiB0aGlzLmFjdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IHRvU3RyaW5nIG92ZXJyaWRlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3dpdGhJZF0gZGVmYXVsdHMgdG8gdHJ1ZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt3aXRoTG9nXSBkZWZhdWx0cyB0byB0cnVlXG4gICAqL1xuICB0b1N0cmluZyh3aXRoSWQgPSB0cnVlLCB3aXRoTG9nID0gZmFsc2UpIHtcbiAgICByZXR1cm4gYCR7d2l0aElkID8gYFske3RoaXMuaWR9XWAgOiBcIlwifVtUcmFuc2FjdGlvbl1bJHt0aGlzLnNvdXJjZX0uJHt0aGlzLm1ldGhvZH0ke1xuICAgICAgd2l0aExvZyA/IGBdXFxuVHJhbnNhY3Rpb24gTG9nOlxcbiR7dGhpcy5sb2cuam9pbihcIlxcblwiKX1gIDogXCJdXCJcbiAgICB9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBnZXRzIHRoZSB0cmFuc2FjdGlvbnMgcmVmbGVjdGlvbnMga2V5XG4gICAqIEBmdW5jdGlvbiBnZXRSZXBvS2V5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQG1lbWJlck9mIG1vZHVsZTpkYi1kZWNvcmF0b3JzLlRyYW5zYWN0aW9uc1xuICAgKiAqL1xuICBzdGF0aWMga2V5KGtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uYWxLZXlzLlJFRkxFQ1QgKyBrZXk7XG4gIH1cbn1cbiJdfQ==
|
package/lib/esm/constants.js
CHANGED
|
@@ -1 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
export const TransactionalKeys = {
|
|
2
|
+
REFLECT: "model.transactional.",
|
|
3
|
+
TRANSACTIONAL: "transactional",
|
|
4
|
+
};
|
|
5
|
+
|
|
6
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQTJCO0lBQ3ZELE9BQU8sRUFBRSxzQkFBc0I7SUFDL0IsYUFBYSxFQUFFLGVBQWU7Q0FDL0IsQ0FBQyIsImZpbGUiOiJjb25zdGFudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgVHJhbnNhY3Rpb25hbEtleXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIFJFRkxFQ1Q6IFwibW9kZWwudHJhbnNhY3Rpb25hbC5cIixcbiAgVFJBTlNBQ1RJT05BTDogXCJ0cmFuc2FjdGlvbmFsXCIsXG59O1xuIl19
|
package/lib/esm/decorators.d.ts
CHANGED
|
@@ -1,10 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @summary gets the transactions reflections key
|
|
3
|
-
* @function getRepoKey
|
|
4
|
-
* @param {string} key
|
|
5
|
-
* @memberOf module:db-decorators.Transactions
|
|
6
|
-
* */
|
|
7
|
-
export declare const getTransactionalKey: (key: string) => string;
|
|
8
1
|
/**
|
|
9
2
|
* @summary Sets a class Async (promise based) method as transactional
|
|
10
3
|
*
|