@decaf-ts/transactional-decorators 0.0.4 → 0.0.6

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,165 @@
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 method as transactional
10
+ *
11
+ * @param {any[]} [data] option metadata available to the {@link TransactionLock}
12
+ *
13
+ * @function transactional
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 = new Transaction_1.Transaction(this.constructor.name, propertyKey, () => {
46
+ originalMethod
47
+ .call(transaction.bindToTransaction(self), ...args)
48
+ .then((result) => cb(undefined, result))
49
+ .catch(cb);
50
+ }, data.length ? data : undefined);
51
+ Transaction_1.Transaction.submit(transaction);
52
+ }
53
+ });
54
+ };
55
+ Object.defineProperty(methodWrapper, "name", {
56
+ value: propertyKey,
57
+ });
58
+ descriptor.value = methodWrapper;
59
+ };
60
+ }
61
+ //
62
+ // /**
63
+ // * @summary Sets a class Async method as transactional
64
+ // *
65
+ // * @param {any[]} [metadata] option metadata available to the {@link TransactionLock}
66
+ // *
67
+ // * @function transactionalAsync
68
+ // *
69
+ // * @memberOf module:db-decorators.Decorators.transactions
70
+ // */
71
+ // export function transactionalAsync(...metadata: any[]) {
72
+ // return function (
73
+ // target: any,
74
+ // propertyKey: string,
75
+ // descriptor: PropertyDescriptor,
76
+ // ) {
77
+ // metadasta(getTransactionalKey(TransactionalKeys.TRANSACTIONAL))
78
+ // Reflect.defineMetadata(
79
+ // ,
80
+ // {
81
+ // type: "async",
82
+ // metadata: metadata.length ? metadata : undefined,
83
+ // } as TransactionalMetadata,
84
+ // target,
85
+ // propertyKey,
86
+ // );
87
+ //
88
+ // const originalMethod = descriptor.value;
89
+ //
90
+ // const methodWrapper = function (this: any, ...args: any[]) {
91
+ // const callback: Callback = args.pop();
92
+ // if (!callback || typeof callback !== "function")
93
+ // throw new CriticalError(`Missing Callback`);
94
+ //
95
+ // const cb = (err?: Err, ...args: any[]) => {
96
+ // Transaction.release(err).then((_) => callback(err, ...args));
97
+ // };
98
+ //
99
+ // const self = this;
100
+ //
101
+ // let transaction = args.shift();
102
+ // if (transaction instanceof Transaction) {
103
+ // const updatedTransaction: Transaction = new Transaction(
104
+ // this.constructor.name,
105
+ // propertyKey,
106
+ // () => {
107
+ // try {
108
+ // return originalMethod.call(
109
+ // updatedTransaction.bindToTransaction(self),
110
+ // ...args,
111
+ // callback,
112
+ // );
113
+ // } catch (e: any) {
114
+ // return callback(e);
115
+ // }
116
+ // },
117
+ // metadata.length ? metadata : undefined,
118
+ // );
119
+ //
120
+ // transaction.bindTransaction(updatedTransaction);
121
+ // transaction.fire();
122
+ // } else {
123
+ // args.unshift(transaction);
124
+ // transaction = undefined;
125
+ // transaction = new Transaction(
126
+ // this.constructor.name,
127
+ // propertyKey,
128
+ // () => {
129
+ // try {
130
+ // return originalMethod.call(
131
+ // transaction.bindToTransaction(self),
132
+ // ...args,
133
+ // cb,
134
+ // );
135
+ // } catch (e: any) {
136
+ // return cb(e);
137
+ // }
138
+ // },
139
+ // metadata.length ? metadata : undefined,
140
+ // );
141
+ // Transaction.submit(transaction);
142
+ // }
143
+ // };
144
+ //
145
+ // Object.defineProperty(methodWrapper, "name", {
146
+ // value: propertyKey,
147
+ // });
148
+ // descriptor.value = methodWrapper;
149
+ // };
150
+ // }
151
+ /**
152
+ * @summary Util function to wrap super calls with the transaction when the super's method is also transactional
153
+ *
154
+ * @param {Function} method the super method (must be bound to the proper this), eg: super.create.bind(this)
155
+ * @param {any[]} args the arguments to call the method with
156
+ *
157
+ * @memberOf module:db-decorators.Transaction
158
+ */
159
+ function transactionalSuperCall(method, ...args) {
160
+ const lock = Transaction_1.Transaction.getLock();
161
+ const currentTransaction = lock.currentTransaction;
162
+ return method(currentTransaction, ...args);
163
+ }
164
+
165
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,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LG9CQUFvQjtBQUNwQixvQkFBb0I7QUFDcEIsNENBQTRDO0FBQzVDLHVEQUF1RDtBQUN2RCwyQkFBMkI7QUFDM0Isc0JBQXNCO0FBQ3RCLG1CQUFtQjtBQUNuQixpQ0FBaUM7QUFDakMsOEJBQThCO0FBQzlCLGdCQUFnQjtBQUNoQixlQUFlO0FBQ2Ysb0RBQW9EO0FBQ3BELGFBQWE7QUFDYiwyQ0FBMkM7QUFDM0MsVUFBVTtBQUNWLFNBQVM7QUFDVCxFQUFFO0FBQ0YscURBQXFEO0FBQ3JELDRCQUE0QjtBQUM1QixVQUFVO0FBQ1Ysd0NBQXdDO0FBQ3hDLE9BQU87QUFDUCxJQUFJO0FBRUo7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLHNCQUFzQixDQUFDLE1BQVcsRUFBRSxHQUFHLElBQVM7SUFDOUQsTUFBTSxJQUFJLEdBQUcseUJBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNuQyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNuRCxPQUFPLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQzdDLENBQUMiLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zYWN0aW9uYWxLZXlzIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBtZXRhZGF0YSB9IGZyb20gXCJAZGVjYWYtdHMvcmVmbGVjdGlvblwiO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tIFwiLi9UcmFuc2FjdGlvblwiO1xuXG4vKipcbiAqIEBzdW1tYXJ5IFNldHMgYSBjbGFzcyBBc3luYyBtZXRob2QgYXMgdHJhbnNhY3Rpb25hbFxuICpcbiAqIEBwYXJhbSB7YW55W119ICBbZGF0YV0gb3B0aW9uIG1ldGFkYXRhIGF2YWlsYWJsZSB0byB0aGUge0BsaW5rIFRyYW5zYWN0aW9uTG9ja31cbiAqXG4gKiBAZnVuY3Rpb24gdHJhbnNhY3Rpb25hbFxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGItZGVjb3JhdG9ycy5EZWNvcmF0b3JzLnRyYW5zYWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNhY3Rpb25hbCguLi5kYXRhOiBhbnlbXSkge1xuICByZXR1cm4gZnVuY3Rpb24gKFxuICAgIHRhcmdldDogYW55LFxuICAgIHByb3BlcnR5S2V5OiBzdHJpbmcsXG4gICAgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yXG4gICkge1xuICAgIG1ldGFkYXRhKFRyYW5zYWN0aW9uLmtleShUcmFuc2FjdGlvbmFsS2V5cy5UUkFOU0FDVElPTkFMKSwgZGF0YSkoXG4gICAgICB0YXJnZXQsXG4gICAgICBwcm9wZXJ0eUtleVxuICAgICk7XG5cbiAgICBjb25zdCBvcmlnaW5hbE1ldGhvZCA9IGRlc2NyaXB0b3IudmFsdWU7XG5cbiAgICBjb25zdCBtZXRob2RXcmFwcGVyID0gZnVuY3Rpb24gKHRoaXM6IGFueSwgLi4uYXJnczogYW55W10pOiBQcm9taXNlPGFueT4ge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgY2IgPSAoZXJyPzogRXJyb3IsIHJlc3VsdD86IGFueSkgPT4ge1xuICAgICAgICAgIFRyYW5zYWN0aW9uLnJlbGVhc2UoZXJyKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBsZXQgdHJhbnNhY3Rpb24gPSBhcmdzLnNoaWZ0KCk7XG4gICAgICAgIGlmICh0cmFuc2FjdGlvbiBpbnN0YW5jZW9mIFRyYW5zYWN0aW9uKSB7XG4gICAgICAgICAgY29uc3QgdXBkYXRlZFRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbihcbiAgICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IubmFtZSxcbiAgICAgICAgICAgIHByb3BlcnR5S2V5LFxuICAgICAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICBvcmlnaW5hbE1ldGhvZFxuICAgICAgICAgICAgICAgIC5jYWxsKHVwZGF0ZWRUcmFuc2FjdGlvbi5iaW5kVG9UcmFuc2FjdGlvbihzZWxmKSwgLi4uYXJncylcbiAgICAgICAgICAgICAgICAudGhlbihyZXNvbHZlKVxuICAgICAgICAgICAgICAgIC5jYXRjaChyZWplY3QpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGEubGVuZ3RoID8gZGF0YSA6IHVuZGVmaW5lZFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB0cmFuc2FjdGlvbi5iaW5kVHJhbnNhY3Rpb24odXBkYXRlZFRyYW5zYWN0aW9uKTtcbiAgICAgICAgICB0cmFuc2FjdGlvbi5maXJlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXJncy51bnNoaWZ0KHRyYW5zYWN0aW9uKTtcbiAgICAgICAgICB0cmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbihcbiAgICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IubmFtZSxcbiAgICAgICAgICAgIHByb3BlcnR5S2V5LFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICBvcmlnaW5hbE1ldGhvZFxuICAgICAgICAgICAgICAgIC5jYWxsKHRyYW5zYWN0aW9uLmJpbmRUb1RyYW5zYWN0aW9uKHNlbGYpLCAuLi5hcmdzKVxuICAgICAgICAgICAgICAgIC50aGVuKChyZXN1bHQ6IGFueSkgPT4gY2IodW5kZWZpbmVkLCByZXN1bHQpKVxuICAgICAgICAgICAgICAgIC5jYXRjaChjYik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0YS5sZW5ndGggPyBkYXRhIDogdW5kZWZpbmVkXG4gICAgICAgICAgKTtcbiAgICAgICAgICBUcmFuc2FjdGlvbi5zdWJtaXQodHJhbnNhY3Rpb24pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG1ldGhvZFdyYXBwZXIsIFwibmFtZVwiLCB7XG4gICAgICB2YWx1ZTogcHJvcGVydHlLZXksXG4gICAgfSk7XG4gICAgZGVzY3JpcHRvci52YWx1ZSA9IG1ldGhvZFdyYXBwZXI7XG4gIH07XG59XG4vL1xuLy8gLyoqXG4vLyAgKiBAc3VtbWFyeSBTZXRzIGEgY2xhc3MgQXN5bmMgbWV0aG9kIGFzIHRyYW5zYWN0aW9uYWxcbi8vICAqXG4vLyAgKiBAcGFyYW0ge2FueVtdfSAgW21ldGFkYXRhXSBvcHRpb24gbWV0YWRhdGEgYXZhaWxhYmxlIHRvIHRoZSB7QGxpbmsgVHJhbnNhY3Rpb25Mb2NrfVxuLy8gICpcbi8vICAqIEBmdW5jdGlvbiB0cmFuc2FjdGlvbmFsQXN5bmNcbi8vICAqXG4vLyAgKiBAbWVtYmVyT2YgbW9kdWxlOmRiLWRlY29yYXRvcnMuRGVjb3JhdG9ycy50cmFuc2FjdGlvbnNcbi8vICAqL1xuLy8gZXhwb3J0IGZ1bmN0aW9uIHRyYW5zYWN0aW9uYWxBc3luYyguLi5tZXRhZGF0YTogYW55W10pIHtcbi8vICAgcmV0dXJuIGZ1bmN0aW9uIChcbi8vICAgICB0YXJnZXQ6IGFueSxcbi8vICAgICBwcm9wZXJ0eUtleTogc3RyaW5nLFxuLy8gICAgIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcixcbi8vICAgKSB7XG4vLyAgICAgbWV0YWRhc3RhKGdldFRyYW5zYWN0aW9uYWxLZXkoVHJhbnNhY3Rpb25hbEtleXMuVFJBTlNBQ1RJT05BTCkpXG4vLyAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShcbi8vICAgICAgICxcbi8vICAgICAgIHtcbi8vICAgICAgICAgdHlwZTogXCJhc3luY1wiLFxuLy8gICAgICAgICBtZXRhZGF0YTogbWV0YWRhdGEubGVuZ3RoID8gbWV0YWRhdGEgOiB1bmRlZmluZWQsXG4vLyAgICAgICB9IGFzIFRyYW5zYWN0aW9uYWxNZXRhZGF0YSxcbi8vICAgICAgIHRhcmdldCxcbi8vICAgICAgIHByb3BlcnR5S2V5LFxuLy8gICAgICk7XG4vL1xuLy8gICAgIGNvbnN0IG9yaWdpbmFsTWV0aG9kID0gZGVzY3JpcHRvci52YWx1ZTtcbi8vXG4vLyAgICAgY29uc3QgbWV0aG9kV3JhcHBlciA9IGZ1bmN0aW9uICh0aGlzOiBhbnksIC4uLmFyZ3M6IGFueVtdKSB7XG4vLyAgICAgICBjb25zdCBjYWxsYmFjazogQ2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuLy8gICAgICAgaWYgKCFjYWxsYmFjayB8fCB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIilcbi8vICAgICAgICAgdGhyb3cgbmV3IENyaXRpY2FsRXJyb3IoYE1pc3NpbmcgQ2FsbGJhY2tgKTtcbi8vXG4vLyAgICAgICBjb25zdCBjYiA9IChlcnI/OiBFcnIsIC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4vLyAgICAgICAgIFRyYW5zYWN0aW9uLnJlbGVhc2UoZXJyKS50aGVuKChfKSA9PiBjYWxsYmFjayhlcnIsIC4uLmFyZ3MpKTtcbi8vICAgICAgIH07XG4vL1xuLy8gICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4vL1xuLy8gICAgICAgbGV0IHRyYW5zYWN0aW9uID0gYXJncy5zaGlmdCgpO1xuLy8gICAgICAgaWYgKHRyYW5zYWN0aW9uIGluc3RhbmNlb2YgVHJhbnNhY3Rpb24pIHtcbi8vICAgICAgICAgY29uc3QgdXBkYXRlZFRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbihcbi8vICAgICAgICAgICB0aGlzLmNvbnN0cnVjdG9yLm5hbWUsXG4vLyAgICAgICAgICAgcHJvcGVydHlLZXksXG4vLyAgICAgICAgICAgKCkgPT4ge1xuLy8gICAgICAgICAgICAgdHJ5IHtcbi8vICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsTWV0aG9kLmNhbGwoXG4vLyAgICAgICAgICAgICAgICAgdXBkYXRlZFRyYW5zYWN0aW9uLmJpbmRUb1RyYW5zYWN0aW9uKHNlbGYpLFxuLy8gICAgICAgICAgICAgICAgIC4uLmFyZ3MsXG4vLyAgICAgICAgICAgICAgICAgY2FsbGJhY2ssXG4vLyAgICAgICAgICAgICAgICk7XG4vLyAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbi8vICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGUpO1xuLy8gICAgICAgICAgICAgfVxuLy8gICAgICAgICAgIH0sXG4vLyAgICAgICAgICAgbWV0YWRhdGEubGVuZ3RoID8gbWV0YWRhdGEgOiB1bmRlZmluZWQsXG4vLyAgICAgICAgICk7XG4vL1xuLy8gICAgICAgICB0cmFuc2FjdGlvbi5iaW5kVHJhbnNhY3Rpb24odXBkYXRlZFRyYW5zYWN0aW9uKTtcbi8vICAgICAgICAgdHJhbnNhY3Rpb24uZmlyZSgpO1xuLy8gICAgICAgfSBlbHNlIHtcbi8vICAgICAgICAgYXJncy51bnNoaWZ0KHRyYW5zYWN0aW9uKTtcbi8vICAgICAgICAgdHJhbnNhY3Rpb24gPSB1bmRlZmluZWQ7XG4vLyAgICAgICAgIHRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKFxuLy8gICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IubmFtZSxcbi8vICAgICAgICAgICBwcm9wZXJ0eUtleSxcbi8vICAgICAgICAgICAoKSA9PiB7XG4vLyAgICAgICAgICAgICB0cnkge1xuLy8gICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxNZXRob2QuY2FsbChcbi8vICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi5iaW5kVG9UcmFuc2FjdGlvbihzZWxmKSxcbi8vICAgICAgICAgICAgICAgICAuLi5hcmdzLFxuLy8gICAgICAgICAgICAgICAgIGNiLFxuLy8gICAgICAgICAgICAgICApO1xuLy8gICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4vLyAgICAgICAgICAgICAgIHJldHVybiBjYihlKTtcbi8vICAgICAgICAgICAgIH1cbi8vICAgICAgICAgICB9LFxuLy8gICAgICAgICAgIG1ldGFkYXRhLmxlbmd0aCA/IG1ldGFkYXRhIDogdW5kZWZpbmVkLFxuLy8gICAgICAgICApO1xuLy8gICAgICAgICBUcmFuc2FjdGlvbi5zdWJtaXQodHJhbnNhY3Rpb24pO1xuLy8gICAgICAgfVxuLy8gICAgIH07XG4vL1xuLy8gICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXRob2RXcmFwcGVyLCBcIm5hbWVcIiwge1xuLy8gICAgICAgdmFsdWU6IHByb3BlcnR5S2V5LFxuLy8gICAgIH0pO1xuLy8gICAgIGRlc2NyaXB0b3IudmFsdWUgPSBtZXRob2RXcmFwcGVyO1xuLy8gICB9O1xuLy8gfVxuXG4vKipcbiAqIEBzdW1tYXJ5IFV0aWwgZnVuY3Rpb24gdG8gd3JhcCBzdXBlciBjYWxscyB3aXRoIHRoZSB0cmFuc2FjdGlvbiB3aGVuIHRoZSBzdXBlcidzIG1ldGhvZCBpcyBhbHNvIHRyYW5zYWN0aW9uYWxcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBtZXRob2QgdGhlIHN1cGVyIG1ldGhvZCAobXVzdCBiZSBib3VuZCB0byB0aGUgcHJvcGVyIHRoaXMpLCBlZzogc3VwZXIuY3JlYXRlLmJpbmQodGhpcylcbiAqIEBwYXJhbSB7YW55W119IGFyZ3MgdGhlIGFyZ3VtZW50cyB0byBjYWxsIHRoZSBtZXRob2Qgd2l0aFxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGItZGVjb3JhdG9ycy5UcmFuc2FjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNhY3Rpb25hbFN1cGVyQ2FsbChtZXRob2Q6IGFueSwgLi4uYXJnczogYW55KSB7XG4gIGNvbnN0IGxvY2sgPSBUcmFuc2FjdGlvbi5nZXRMb2NrKCk7XG4gIGNvbnN0IGN1cnJlbnRUcmFuc2FjdGlvbiA9IGxvY2suY3VycmVudFRyYW5zYWN0aW9uO1xuICByZXR1cm4gbWV0aG9kKGN1cnJlbnRUcmFuc2FjdGlvbiwgLi4uYXJncyk7XG59XG4iXX0=
@@ -1,16 +1,9 @@
1
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
- /**
9
- * @summary Sets a class Async (promise based) method as transactional
2
+ * @summary Sets a class Async method as transactional
10
3
  *
11
4
  * @param {any[]} [data] option metadata available to the {@link TransactionLock}
12
5
  *
13
- * @function transactionalPromise
6
+ * @function transactional
14
7
  *
15
8
  * @memberOf module:db-decorators.Decorators.transactions
16
9
  */
@@ -23,4 +16,4 @@ export declare function transactional(...data: any[]): (target: any, propertyKey
23
16
  *
24
17
  * @memberOf module:db-decorators.Transaction
25
18
  */
26
- export declare function transactionalSuperCall(method: any, ...args: any): void;
19
+ export declare function transactionalSuperCall(method: any, ...args: any): any;
@@ -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