@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.
@@ -1,3 +1,152 @@
1
- Object.defineProperty(exports,"__esModule",{value:!0}),exports.Transaction=void 0;let reflection_1=require("@decaf-ts/reflection"),SyncronousLock_1=require("./locks/SyncronousLock.cjs"),db_decorators_1=require("@decaf-ts/db-decorators"),utils_1=require("./utils.cjs"),constants_1=require("./constants.cjs");class Transaction{constructor(t,o,s,i){this.id=Date.now(),this.action=s,this.method=o,this.log=[[this.id,t,o].join(" | ")],this.source=t,this.metadata=i}static push(t,o,...s){let i=s.pop();if(!i||"function"!=typeof i)throw new Error("Missing callback");let n=(t,...o)=>{this.getLock().release(t).then(()=>i(t,...o))},e=new Transaction(t.constructor.name,o.name?(0,utils_1.getObjectName)(o):"Anonymous",()=>o.call(e.bindToTransaction(t),...s,n));this.getLock().submit(e)}static setLock(t){this.lock=t}static getLock(){return this.lock||(this.lock=new SyncronousLock_1.SyncronousLock),this.lock}static submit(t){this.getLock().submit(t)}static async release(t){return this.getLock().release(t)}getMetadata(){return this.metadata?[...this.metadata]:void 0}bindTransaction(t){this.log.push(...t.log),t.bindTransaction=this.bindToTransaction.bind(this),t.bindToTransaction=this.bindToTransaction.bind(this),this.action=t.action}bindToTransaction(s){let i=(0,db_decorators_1.getAllPropertyDecoratorsRecursive)(s,void 0,constants_1.TransactionalKeys.REFLECT);if(!i)return s;let n=this,t=(0,reflection_1.getAllProperties)(s).reduce((t,o)=>(-1!==Object.keys(i).indexOf(o)&&i[o].find(t=>t.key===constants_1.TransactionalKeys.TRANSACTIONAL)?t[o]=(...t)=>s[o].call(s.__originalObj||s,n,...t):"clazz"===o||"constructor"===o?t[o]=s[o]:"function"==typeof s[o]?t[o]=s[o].bind(s.__originalObj||s):"object"==typeof s[o]&&s[o].constructor&&(0,reflection_1.getClassDecorators)(constants_1.TransactionalKeys.REFLECT,s[o]).find(t=>t.key===constants_1.TransactionalKeys.TRANSACTIONAL)?t[o]=n.bindToTransaction(s[o]):t[o]=s[o],t),{});return t[db_decorators_1.DBKeys.ORIGINAL]=s[db_decorators_1.DBKeys.ORIGINAL]||s,t.toString=()=>(0,utils_1.getObjectName)(t[db_decorators_1.DBKeys.ORIGINAL])+" proxy for transaction "+this.id,t}fire(){if(this.action)return this.action();throw new Error("Missing the method")}toString(t=!0,o=!1){return`${t?`[${this.id}]`:""}[Transaction][${this.source}.`+this.method+(o?`]
2
- Transaction Log:
3
- `+this.log.join("\n"):"]")}}exports.Transaction=Transaction;
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
@@ -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
- Object.defineProperty(exports,"__esModule",{value:!0}),exports.TransactionalKeys=void 0,exports.TransactionalKeys={REFLECT:"model.transactional.",TRANSACTIONAL:"transactional"};
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=
@@ -1 +1,166 @@
1
- Object.defineProperty(exports,"__esModule",{value:!0}),exports.getTransactionalKey=void 0,exports.transactional=transactional,exports.transactionalSuperCall=transactionalSuperCall;let constants_1=require("./constants.cjs"),reflection_1=require("@decaf-ts/reflection"),Transaction_1=require("./Transaction.cjs"),getTransactionalKey=n=>constants_1.TransactionalKeys.REFLECT+n;function transactional(...l){return function(n,s,a){(0,reflection_1.metadata)((0,exports.getTransactionalKey)(constants_1.TransactionalKeys.TRANSACTIONAL),l)(n,s);let c=a.value;function t(...o){let i=this;return new Promise((t,e)=>{let a=(n,a)=>{Transaction_1.Transaction.release(n).then(()=>{if(n)return e(n);t(a)})},r=o.shift();if(r instanceof Transaction_1.Transaction){let n=new Transaction_1.Transaction(this.constructor.name,s,async()=>{c.call(n.bindToTransaction(i),...o).then(t).catch(e)},l.length?l:void 0);r.bindTransaction(n),r.fire()}else o.unshift(r),r=void 0,r=new Transaction_1.Transaction(this.constructor.name,s,()=>{c.call(r.bindToTransaction(i),...o).then(n=>a(void 0,n)).catch(a)},l.length?l:void 0),Transaction_1.Transaction.submit(r)})}Object.defineProperty(t,"name",{value:s}),a.value=t}}function transactionalSuperCall(n,...a){n(Transaction_1.Transaction.getLock().currentTransaction,...a)}exports.getTransactionalKey=getTransactionalKey;
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==
@@ -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
  *
@@ -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
  }
@@ -1,3 +1,148 @@
1
- import{getAllProperties,getClassDecorators}from"@decaf-ts/reflection";import{SyncronousLock}from"./locks/SyncronousLock";import{DBKeys,getAllPropertyDecoratorsRecursive}from"@decaf-ts/db-decorators";import{getObjectName}from"./utils";import{TransactionalKeys}from"./constants";class Transaction{constructor(t,o,i,s){this.id=Date.now(),this.action=i,this.method=o,this.log=[[this.id,t,o].join(" | ")],this.source=t,this.metadata=s}static push(t,o,...i){let s=i.pop();if(!s||"function"!=typeof s)throw new Error("Missing callback");let e=(t,...o)=>{this.getLock().release(t).then(()=>s(t,...o))},n=new Transaction(t.constructor.name,o.name?getObjectName(o):"Anonymous",()=>o.call(n.bindToTransaction(t),...i,e));this.getLock().submit(n)}static setLock(t){this.lock=t}static getLock(){return this.lock||(this.lock=new SyncronousLock),this.lock}static submit(t){this.getLock().submit(t)}static async release(t){return this.getLock().release(t)}getMetadata(){return this.metadata?[...this.metadata]:void 0}bindTransaction(t){this.log.push(...t.log),t.bindTransaction=this.bindToTransaction.bind(this),t.bindToTransaction=this.bindToTransaction.bind(this),this.action=t.action}bindToTransaction(i){let s=getAllPropertyDecoratorsRecursive(i,void 0,TransactionalKeys.REFLECT);if(!s)return i;let e=this,t=getAllProperties(i).reduce((t,o)=>(-1!==Object.keys(s).indexOf(o)&&s[o].find(t=>t.key===TransactionalKeys.TRANSACTIONAL)?t[o]=(...t)=>i[o].call(i.__originalObj||i,e,...t):"clazz"===o||"constructor"===o?t[o]=i[o]:"function"==typeof i[o]?t[o]=i[o].bind(i.__originalObj||i):"object"==typeof i[o]&&i[o].constructor&&getClassDecorators(TransactionalKeys.REFLECT,i[o]).find(t=>t.key===TransactionalKeys.TRANSACTIONAL)?t[o]=e.bindToTransaction(i[o]):t[o]=i[o],t),{});return t[DBKeys.ORIGINAL]=i[DBKeys.ORIGINAL]||i,t.toString=()=>getObjectName(t[DBKeys.ORIGINAL])+" proxy for transaction "+this.id,t}fire(){if(this.action)return this.action();throw new Error("Missing the method")}toString(t=!0,o=!1){return`${t?`[${this.id}]`:""}[Transaction][${this.source}.`+this.method+(o?`]
2
- Transaction Log:
3
- `+this.log.join("\n"):"]")}}export{Transaction};
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==
@@ -1 +1,6 @@
1
- let TransactionalKeys={REFLECT:"model.transactional.",TRANSACTIONAL:"transactional"};export{TransactionalKeys};
1
+ export const TransactionalKeys = {
2
+ REFLECT: "model.transactional.",
3
+ TRANSACTIONAL: "transactional",
4
+ };
5
+
6
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQTJCO0lBQ3ZELE9BQU8sRUFBRSxzQkFBc0I7SUFDL0IsYUFBYSxFQUFFLGVBQWU7Q0FDL0IsQ0FBQyIsImZpbGUiOiJjb25zdGFudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgVHJhbnNhY3Rpb25hbEtleXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIFJFRkxFQ1Q6IFwibW9kZWwudHJhbnNhY3Rpb25hbC5cIixcbiAgVFJBTlNBQ1RJT05BTDogXCJ0cmFuc2FjdGlvbmFsXCIsXG59O1xuIl19
@@ -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
  *