@decaf-ts/transactional-decorators 0.1.5 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/transactional-decorators.cjs +1 -1
- package/dist/transactional-decorators.cjs.map +1 -1
- package/dist/transactional-decorators.js +1 -1
- package/dist/transactional-decorators.js.map +1 -1
- package/lib/Transaction.cjs +254 -56
- package/lib/Transaction.d.ts +44 -18
- package/lib/Transaction.js.map +1 -1
- package/lib/constants.cjs +0 -1
- package/lib/constants.js.map +1 -1
- package/lib/decorators.cjs +60 -146
- package/lib/decorators.d.ts +1 -11
- package/lib/decorators.js.map +1 -1
- package/lib/errors.cjs +11 -0
- package/lib/errors.d.ts +4 -0
- package/lib/errors.js.map +1 -0
- package/lib/esm/Transaction.d.ts +44 -18
- package/lib/esm/Transaction.js +254 -56
- package/lib/esm/Transaction.js.map +1 -1
- package/lib/esm/constants.js +0 -1
- package/lib/esm/constants.js.map +1 -1
- package/lib/esm/decorators.d.ts +1 -11
- package/lib/esm/decorators.js +60 -145
- package/lib/esm/decorators.js.map +1 -1
- package/lib/esm/errors.d.ts +4 -0
- package/lib/esm/errors.js +7 -0
- package/lib/esm/errors.js.map +1 -0
- package/lib/esm/index.d.ts +4 -1
- package/lib/esm/index.js +6 -1
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/interfaces/TransactionLock.d.ts +2 -2
- package/lib/esm/locks/{SyncronousLock.d.ts → SynchronousLock.d.ts} +10 -6
- package/lib/esm/locks/SynchronousLock.js +131 -0
- package/lib/esm/locks/SynchronousLock.js.map +1 -0
- package/lib/esm/locks/index.d.ts +1 -1
- package/lib/esm/locks/index.js +1 -1
- package/lib/esm/locks/index.js.map +1 -1
- package/lib/esm/overrides/Metadata.d.ts +8 -0
- package/lib/esm/overrides/Metadata.js +2 -0
- package/lib/esm/overrides/Metadata.js.map +1 -0
- package/lib/esm/overrides/index.d.ts +2 -0
- package/lib/esm/overrides/index.js +3 -0
- package/lib/esm/overrides/index.js.map +1 -0
- package/lib/esm/overrides/overrides.d.ts +1 -0
- package/lib/esm/overrides/overrides.js +12 -0
- package/lib/esm/overrides/overrides.js.map +1 -0
- package/lib/esm/types.d.ts +0 -10
- package/lib/esm/types.js +11 -0
- package/lib/esm/types.js.map +1 -1
- package/lib/index.cjs +7 -2
- package/lib/index.d.ts +4 -1
- package/lib/index.js.map +1 -1
- package/lib/interfaces/TransactionLock.d.ts +2 -2
- package/lib/locks/SynchronousLock.cjs +135 -0
- package/lib/locks/{SyncronousLock.d.ts → SynchronousLock.d.ts} +10 -6
- package/lib/locks/SynchronousLock.js.map +1 -0
- package/lib/locks/index.cjs +1 -1
- package/lib/locks/index.d.ts +1 -1
- package/lib/locks/index.js.map +1 -1
- package/lib/overrides/Metadata.cjs +4 -0
- package/lib/overrides/Metadata.d.ts +8 -0
- package/lib/overrides/Metadata.js.map +1 -0
- package/lib/overrides/index.cjs +19 -0
- package/lib/overrides/index.d.ts +2 -0
- package/lib/overrides/index.js.map +1 -0
- package/lib/overrides/overrides.cjs +14 -0
- package/lib/overrides/overrides.d.ts +1 -0
- package/lib/overrides/overrides.js.map +1 -0
- package/lib/types.cjs +11 -0
- package/lib/types.d.ts +0 -10
- package/lib/types.js.map +1 -1
- package/package.json +2 -3
- package/lib/esm/locks/SyncronousLock.js +0 -128
- package/lib/esm/locks/SyncronousLock.js.map +0 -1
- package/lib/esm/utils.d.ts +0 -1
- package/lib/esm/utils.js +0 -14
- package/lib/esm/utils.js.map +0 -1
- package/lib/locks/SyncronousLock.cjs +0 -132
- package/lib/locks/SyncronousLock.js.map +0 -1
- package/lib/utils.cjs +0 -17
- package/lib/utils.d.ts +0 -1
- package/lib/utils.js.map +0 -1
package/README.md
CHANGED
|
@@ -116,7 +116,7 @@ const transaction = new Transaction(
|
|
|
116
116
|
);
|
|
117
117
|
|
|
118
118
|
// Submitting the transaction for execution
|
|
119
|
-
Transaction.submit(transaction);
|
|
119
|
+
await Transaction.submit(transaction);
|
|
120
120
|
|
|
121
121
|
// Using the Transaction.push method for callback-style APIs
|
|
122
122
|
Transaction.push(
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var t,e;t=this,e=function(t,e,
|
|
1
|
+
var t,e;t=this,e=function(t,e,i,s){"use strict";class a{constructor(){this.queue=[],this.locked=!1}async execute(t){let e;await this.acquire();try{e=await Promise.resolve(t())}catch(t){throw this.release(),t}return this.release(),e}async acquire(){const t=this;return t.locked?new Promise(e=>t.queue.push(e)):(t.locked=!0,Promise.resolve())}release(){const t=this.queue.shift();t?void 0===globalThis.window?globalThis.process.nextTick(t):setTimeout(t,0):this.locked=!1}}const n={TRANSACTIONAL:"transactional"};e.Metadata.transactionals=t=>{const i=e.Metadata.get(t,n.TRANSACTIONAL);return i?Object.keys(i):[]},e.Metadata.isTransactional=t=>!!e.Metadata.get(t,n.TRANSACTIONAL);class o extends i.InternalError{constructor(t="Transaction timed out"){super(t,o.name,500)}}const r=new WeakMap;class c extends s.LoggedClass{static{this.debug=!1}static{this.globalTimeout=-1}static{this.metadataCache=new WeakMap}static{this.log=new Proxy(s.Logging.for(c),{get:(t,e,i)=>"log"!==e||c.debug?Reflect.get(t,e,i):(...t)=>{}})}get log(){return this._log||(this._log=c.log),this._log}static{this.contexts=new WeakMap}constructor(t,e,i,s){super(),this.initialFireDispatched=!1,this.released=!1,this.id=Date.now(),this.action=i,this.method=e,this.logs=[[this.id,t,e].join(" | ")],this.source=t,this.metadata=s,this.completion=new Promise((t,e)=>{this.resolveCompletion=t,this.rejectCompletion=e})}static async push(t,e,...i){const s=this.log.for(this.push),a=c.describeTarget(t),n=c.describeTarget(e),o=new c(a,n,async()=>{const a=s.for(o.id.toString());try{a.verbose("Executing transaction method "+n),a.debug("With arguments: "+JSON.stringify(i));const s=await Promise.resolve(e.call(o.bindToTransaction(t),...i));return a.verbose(`Transaction method ${n} executed successfully`),a.debug("Result: "+JSON.stringify(s)),await o.release(),a.debug("lock released"),s}catch(t){throw await o.release(t),t}});return s.debug(`Pushing transaction ${o.id} for method ${n} on issuer ${a}`),c.submit(o)}static async run(t,e,i){const s="function"!=typeof t,a=s?t:void 0,n=s?e:t;if("function"!=typeof n)throw Error("Transaction.run requires an async function");const o=s?i:e,r=Array.isArray(o)&&o.length?o:void 0,l=a?c.describeTarget(a):c.describeTarget(n),h=c.describeTarget(n);let d;return d=new c(l,h,async()=>{let t;try{const t=a?d.bindToTransaction(a):void 0;return await n.call(t??d)}catch(e){throw t=e,e}finally{await d.release(t instanceof Error?t:void 0)}},r),c.submit(d)}static setLock(t){this.lock=t}static getLock(){return this.lock||(this.lock=new l),this.lock}static submit(t){return c.getLock().submit(t)}static async release(t){return c.getLock().release(t)}async release(t){this.released||(this.released=!0,await c.release(t))}getMetadata(){return this.metadata?[...this.metadata]:void 0}static getTransactionalMetadata(t){let s=this.metadataCache.get(t);if(s)return s;const a=new Set(["__transactionProxy","__transactionTarget","string"==typeof i.DBKeys.ORIGINAL?i.DBKeys.ORIGINAL:"__originalObj"]),n=e.Metadata.transactionals(t)??[],o=(e.Metadata.properties(t)||[]).filter(t=>!a.has(t)),r=new Map;return o.forEach(i=>{const s=e.Metadata.type(t,i);r.set(i,!!s&&e.Metadata.isTransactional(s))}),s={methods:n,propertyKeys:o,propertyDesignTypes:r},this.metadataCache.set(t,s),s}bindTransaction(t){this.log.for(this.bindTransaction).verbose(`Binding the ${t.toString()} to ${this}`),this.logs.push(...t.logs),t.bindTransaction=this.bindToTransaction.bind(this),t.bindToTransaction=this.bindToTransaction.bind(this),this.action=t.action}bindToTransaction(t){const a=this.log.for(this.bindToTransaction);a.verbose(`Binding object ${s.getObjectName(t)} to transaction ${this.id}`);const n=c.getTransactionalMetadata(t.constructor),o=n.methods;if(!o.length)return t;const r=this,l=new Set(["__transactionProxy","__transactionTarget","string"==typeof i.DBKeys.ORIGINAL?i.DBKeys.ORIGINAL:"__originalObj"]),h=new Set(n.propertyKeys);Object.getOwnPropertyNames(t).forEach(t=>{l.has(t)||h.add(t)});const d=Array.from(h).filter(i=>{if(n.propertyDesignTypes.get(i))return!0;const s=t[i];return!(!s||"object"!=typeof s&&"function"!=typeof s||!e.Metadata.isTransactional(s.constructor))});a.debug(`found transaction methods: ${o.join(", ")} and properties: ${d.join(", ")}`);const g=new Proxy(t,{get:(t,e,i)=>o.includes(e)?new Proxy(t[e],{apply:(t,e,i)=>Reflect.apply(t,e,[r,...i])}):d.includes(e)?r.bindToTransaction(t[e]):Reflect.get(t,e,i)});return g[i.DBKeys.ORIGINAL]=t[i.DBKeys.ORIGINAL]||t,g.toString=()=>s.getObjectName(g[i.DBKeys.ORIGINAL])+" proxy for transaction "+this.id,g.__transactionProxy=!0,g.__transactionTarget=t.__transactionTarget||t,c.contexts.set(g,r),g}applyGlobalTimeout(t){if(0>=c.globalTimeout)return t;const e=c.globalTimeout,i=this.log.for(this.applyGlobalTimeout);return new Promise((s,a)=>{let n=!1;const r=setTimeout(()=>{if(n)return;const t=new o(`Transaction ${this.toString()} exceeded timeout of ${e}ms`);i.warn(t.message),this.release(t).catch(t=>i.error(t)),a(t)},e);t.then(t=>{n=!0,clearTimeout(r),s(t)}).catch(t=>{n=!0,clearTimeout(r),a(t)})})}fire(){if(!this.action)throw Error("Missing the method");const t=(async()=>this.action?await this.action():void 0)(),e=c.globalTimeout>0?this.applyGlobalTimeout(t):t;return this.initialFireDispatched||(this.initialFireDispatched=!0,e.then(t=>(this.resolveCompletion?.(t),t)).catch(t=>{throw this.rejectCompletion?.(t),t})),e}toString(t=!0,e=!1){return`${t?`[${this.id}]`:""}[Transaction][${this.source}.${this.method}${e?"]\nTransaction Log:\n"+this.logs.join("\n"):"]"}`}static contextTransaction(t){if(t&&t.__transactionProxy)return this.contexts.get(t)}wait(){return this.completion}static describeTarget(t){if(null===t||"object"!=typeof t&&"function"!=typeof t)return s.getObjectName(t);const e=t;let i=r.get(e);return i||(i=s.getObjectName(t),r.set(e,i)),i}}class l extends s.LoggedClass{get log(){return this._log||(this._log=c.log.for(this)),this._log}logger(t){return this.loggerCache.has(t)||this.loggerCache.set(t,this.log.for(this[t])),this.loggerCache.get(t)}constructor(t=1,e,i){super(),this.counter=t,this.onBegin=e,this.onEnd=i,this.pendingTransactions=[],this.currentTransaction=void 0,this.loggerCache=new Map,this.lock=new a}async submit(t){const e=this.logger("submit");if(await this.lock.acquire(),e.silly("Lock acquired to submit transaction "+t.id),this.currentTransaction&&this.currentTransaction.id===t.id)return this.lock.release(),e.silly("Released lock for re-entrant transaction "+t.id),t.fire();let i;return this.counter>0?(this.counter--,this.lock.release(),e.silly("Released lock for transaction "+t.id),i=this.fireTransaction(t)):(e.debug(`Pushing transaction ${t.id} to the queue`),this.pendingTransactions.push(t),i=t.wait(),this.lock.release(),e.silly("Released lock after queuing transaction "+t.id)),i}async fireTransaction(t){const e=this.logger("fireTransaction");return await this.lock.acquire(),e.silly("Lock acquired obtain transaction "+t.id),this.currentTransaction=t,this.lock.release(),e.silly("Released lock after obtaining "+t.id),this.onBegin&&(e.verbose("Calling onBegin for transaction "+t.id),await this.onBegin()),e.info(`Starting transaction ${t.id}. ${this.pendingTransactions.length} remaining...`),t.fire()}async release(t){const e=this.logger("release");await this.lock.acquire(),this.currentTransaction||e.warn("Trying to release an unexisting transaction. should never happen..."),e.verbose("Releasing transaction "+this.currentTransaction?.toString(!0,!0));const i=this.currentTransaction?.id;if(this.currentTransaction=void 0,this.lock.release(),e.silly("Released lock after clearing transaction "+i),this.onEnd&&(e.verbose("Calling onEnd for transaction "+i),await this.onEnd(t)),await this.lock.acquire(),e.silly(`Acquired lock after completing transaction ${i} for pending transaction verification`),this.pendingTransactions.length>0){const t=this.pendingTransactions.shift(),i=()=>this.fireTransaction.call(this,t).catch(t=>{this.log.for(this.fireTransaction).error(t)});e.silly(`Marking ${t.id} for execution`),s.isBrowser()?setTimeout(i,0):globalThis.process.nextTick(i)}else e.debug("No pending transactions. Incrementing counter."),this.counter++;this.lock.release(),e.silly("Released lock after completing transaction "+i)}}const h="##VERSION##",d="##PACKAGE##";e.Metadata.registerLibrary(d,h),t.Lock=a,t.PACKAGE_NAME=d,t.SynchronousLock=l,t.TimeoutError=o,t.Transaction=c,t.TransactionalKeys=n,t.VERSION=h,t.transactional=(...t)=>(s,a,o)=>{if(!o)throw new i.InternalError("This decorator only applies to methods");return e.method()(s,a,o),e.Metadata.set(s.constructor,e.Metadata.key(n.TRANSACTIONAL,a),{data:t}),o.value=new Proxy(o.value,{apply:async(e,i,n)=>new Promise((o,r)=>{async function l(t,e,i){return!e||e instanceof Error||i||(i=e,e=void 0),await t.release(e),e?r(e):o(i)}const h=n[0],d=(()=>{let t=0;for(;t<n.length&&n[t]instanceof c;)t++;return t})(),g=d>0?n.slice(d):n,u=h instanceof c?h:c.contextTransaction(i);if(u){const n=new c(s.name,a,async()=>{try{return o(await Reflect.apply(e,n.bindToTransaction(i),g))}catch(t){return r(t)}},t.length?t:void 0);u.bindTransaction(n),u.fire()}else{const n=new c(s.name,a,async()=>{try{return l(n,void 0,await Reflect.apply(e,n.bindToTransaction(i),g))}catch(t){return l(n,t)}},t.length?t:void 0);c.submit(n)}})}),o}},"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@decaf-ts/decoration"),require("@decaf-ts/db-decorators"),require("@decaf-ts/logging")):"function"==typeof define&&define.amd?define(["exports","@decaf-ts/decoration","@decaf-ts/db-decorators","@decaf-ts/logging"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self)["transactional-decorators"]={},t.decafTsDecoration,t.decafTsDbDecorators,t.decafTsLogging);
|
|
2
2
|
//# sourceMappingURL=transactional-decorators.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactional-decorators.cjs","sources":["../src/locks/Lock.ts","../src/locks/SyncronousLock.ts","../src/constants.ts","../src/utils.ts","../src/Transaction.ts","../src/index.ts","../src/decorators.ts"],"sourcesContent":[null,null,null,null,null,null,null],"names":["Lock","constructor","this","queue","locked","execute","func","result","acquire","Promise","resolve","e","release","self","push","next","shift","globalThis","window","process","nextTick","setTimeout","SyncronousLock","counter","onBegin","onEnd","currentTransaction","undefined","lock","pendingTransactions","submit","transaction","then","id","fire","fireTransaction","err","afterConclusionCB","length","cb","TransactionalKeys","REFLECT","TRANSACTIONAL","getObjectName","obj","name","indexOf","toString","Transaction","source","method","action","metadata","Date","now","log","join","issuer","callbackMethod","args","callback","pop","Error","getLock","call","bindToTransaction","setLock","getMetadata","bindTransaction","nextTransaction","bind","transactionalMethods","getAllPropertyDecoratorsRecursive","boundObj","Reflection","getAllProperties","reduce","accum","k","Object","keys","find","o","key","__originalObj","getClassDecorators","DBKeys","ORIGINAL","withId","withLog","data","target","propertyKey","descriptor","InternalError","originalMethod","value","methodWrapper","reject","updatedTransaction","async","catch","unshift","defineProperty"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"transactional-decorators.cjs","sources":["../src/locks/Lock.ts","../src/constants.ts","../src/overrides/overrides.ts","../src/errors.ts","../src/Transaction.ts","../src/locks/SynchronousLock.ts","../src/index.ts","../src/decorators.ts"],"sourcesContent":[null,null,null,null,null,null,null,null],"names":["Lock","constructor","this","queue","locked","execute","func","result","acquire","Promise","resolve","e","release","self","push","next","shift","globalThis","window","process","nextTick","setTimeout","TransactionalKeys","TRANSACTIONAL","Metadata","transactionals","obj","meta","get","Object","keys","isTransactional","TimeoutError","InternalError","message","super","name","objectNameCache","WeakMap","Transaction","LoggedClass","debug","globalTimeout","metadataCache","log","Proxy","Logging","for","target","prop","receiver","Reflect","args","contexts","source","method","action","metadata","initialFireDispatched","released","id","Date","now","logs","join","completion","reject","resolveCompletion","rejectCompletion","issuer","issuerName","describeTarget","methodName","transaction","async","l","toString","verbose","JSON","stringify","call","bindToTransaction","submit","run","contextOrRunnable","runnableOrMetadata","maybeMetadata","contextProvided","context","undefined","runnable","Error","rawMetadata","metadataValue","Array","isArray","length","sourceName","caughtError","boundContext","error","setLock","lock","getLock","SynchronousLock","err","getMetadata","getTransactionalMetadata","cached","reservedProps","Set","DBKeys","ORIGINAL","methods","propertyKeys","properties","filter","has","propertyDesignTypes","Map","forEach","type","set","bindTransaction","nextTransaction","bind","getObjectName","transactionalMethods","props","getOwnPropertyNames","add","transactionProps","from","p","value","boundObj","includes","apply","methodTarget","thisArg","argArray","__transactionProxy","__transactionTarget","applyGlobalTimeout","execution","timeoutMs","settled","timer","warn","catch","releaseErr","then","clearTimeout","fire","baseExecution","executeAction","withId","withLog","contextTransaction","wait","key","logger","loggerCache","counter","onBegin","onEnd","pendingTransactions","currentTransaction","silly","resultPromise","fireTransaction","info","cb","isBrowser","VERSION","PACKAGE_NAME","registerLibrary","data","propertyKey","descriptor","exitFunction","candidate","transactionPrefixLength","count","invocationArgs","slice","activeTransaction","updatedTransaction","newTransaction"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{Metadata as t,method as e}from"@decaf-ts/decoration";import{InternalError as i,DBKeys as n}from"@decaf-ts/db-decorators";import{LoggedClass as s,Logging as a,getObjectName as r,isBrowser as o}from"@decaf-ts/logging";class c{constructor(){this.queue=[],this.locked=!1}async execute(t){let e;await this.acquire();try{e=await Promise.resolve(t())}catch(t){throw this.release(),t}return this.release(),e}async acquire(){const t=this;return t.locked?new Promise(e=>t.queue.push(e)):(t.locked=!0,Promise.resolve())}release(){const t=this.queue.shift();t?void 0===globalThis.window?globalThis.process.nextTick(t):setTimeout(t,0):this.locked=!1}}const l={TRANSACTIONAL:"transactional"};t.transactionals=e=>{const i=t.get(e,"transactional");return i?Object.keys(i):[]},t.isTransactional=e=>!!t.get(e,"transactional");class h extends i{constructor(t="Transaction timed out"){super(t,h.name,500)}}const u=new WeakMap;class g extends s{static{this.debug=!1}static{this.globalTimeout=-1}static{this.metadataCache=new WeakMap}static{this.log=new Proxy(a.for(g),{get:(t,e,i)=>"log"!==e||g.debug?Reflect.get(t,e,i):(...t)=>{}})}get log(){return this._log||(this._log=g.log),this._log}static{this.contexts=new WeakMap}constructor(t,e,i,n){super(),this.initialFireDispatched=!1,this.released=!1,this.id=Date.now(),this.action=i,this.method=e,this.logs=[[this.id,t,e].join(" | ")],this.source=t,this.metadata=n,this.completion=new Promise((t,e)=>{this.resolveCompletion=t,this.rejectCompletion=e})}static async push(t,e,...i){const n=this.log.for(this.push),s=g.describeTarget(t),a=g.describeTarget(e),r=new g(s,a,async()=>{const s=n.for(r.id.toString());try{s.verbose("Executing transaction method "+a),s.debug("With arguments: "+JSON.stringify(i));const n=await Promise.resolve(e.call(r.bindToTransaction(t),...i));return s.verbose(`Transaction method ${a} executed successfully`),s.debug("Result: "+JSON.stringify(n)),await r.release(),s.debug("lock released"),n}catch(t){throw await r.release(t),t}});return n.debug(`Pushing transaction ${r.id} for method ${a} on issuer ${s}`),g.submit(r)}static async run(t,e,i){const n="function"!=typeof t,s=n?t:void 0,a=n?e:t;if("function"!=typeof a)throw Error("Transaction.run requires an async function");const r=n?i:e,o=Array.isArray(r)&&r.length?r:void 0,c=s?g.describeTarget(s):g.describeTarget(a),l=g.describeTarget(a);let h;return h=new g(c,l,async()=>{let t;try{const t=s?h.bindToTransaction(s):void 0;return await a.call(t??h)}catch(e){throw t=e,e}finally{await h.release(t instanceof Error?t:void 0)}},o),g.submit(h)}static setLock(t){this.lock=t}static getLock(){return this.lock||(this.lock=new d),this.lock}static submit(t){return g.getLock().submit(t)}static async release(t){return g.getLock().release(t)}async release(t){this.released||(this.released=!0,await g.release(t))}getMetadata(){return this.metadata?[...this.metadata]:void 0}static getTransactionalMetadata(e){let i=this.metadataCache.get(e);if(i)return i;const s=new Set(["__transactionProxy","__transactionTarget","string"==typeof n.ORIGINAL?n.ORIGINAL:"__originalObj"]),a=t.transactionals(e)??[],r=(t.properties(e)||[]).filter(t=>!s.has(t)),o=new Map;return r.forEach(i=>{const n=t.type(e,i);o.set(i,!!n&&t.isTransactional(n))}),i={methods:a,propertyKeys:r,propertyDesignTypes:o},this.metadataCache.set(e,i),i}bindTransaction(t){this.log.for(this.bindTransaction).verbose(`Binding the ${t.toString()} to ${this}`),this.logs.push(...t.logs),t.bindTransaction=this.bindToTransaction.bind(this),t.bindToTransaction=this.bindToTransaction.bind(this),this.action=t.action}bindToTransaction(e){const i=this.log.for(this.bindToTransaction);i.verbose(`Binding object ${r(e)} to transaction ${this.id}`);const s=g.getTransactionalMetadata(e.constructor),a=s.methods;if(!a.length)return e;const o=this,c=new Set(["__transactionProxy","__transactionTarget","string"==typeof n.ORIGINAL?n.ORIGINAL:"__originalObj"]),l=new Set(s.propertyKeys);Object.getOwnPropertyNames(e).forEach(t=>{c.has(t)||l.add(t)});const h=Array.from(l).filter(i=>{if(s.propertyDesignTypes.get(i))return!0;const n=e[i];return!(!n||"object"!=typeof n&&"function"!=typeof n||!t.isTransactional(n.constructor))});i.debug(`found transaction methods: ${a.join(", ")} and properties: ${h.join(", ")}`);const u=new Proxy(e,{get:(t,e,i)=>a.includes(e)?new Proxy(t[e],{apply:(t,e,i)=>Reflect.apply(t,e,[o,...i])}):h.includes(e)?o.bindToTransaction(t[e]):Reflect.get(t,e,i)});return u[n.ORIGINAL]=e[n.ORIGINAL]||e,u.toString=()=>r(u[n.ORIGINAL])+" proxy for transaction "+this.id,u.__transactionProxy=!0,u.__transactionTarget=e.__transactionTarget||e,g.contexts.set(u,o),u}applyGlobalTimeout(t){if(0>=g.globalTimeout)return t;const e=g.globalTimeout,i=this.log.for(this.applyGlobalTimeout);return new Promise((n,s)=>{let a=!1;const r=setTimeout(()=>{if(a)return;const t=new h(`Transaction ${this.toString()} exceeded timeout of ${e}ms`);i.warn(t.message),this.release(t).catch(t=>i.error(t)),s(t)},e);t.then(t=>{a=!0,clearTimeout(r),n(t)}).catch(t=>{a=!0,clearTimeout(r),s(t)})})}fire(){if(!this.action)throw Error("Missing the method");const t=(async()=>this.action?await this.action():void 0)(),e=g.globalTimeout>0?this.applyGlobalTimeout(t):t;return this.initialFireDispatched||(this.initialFireDispatched=!0,e.then(t=>(this.resolveCompletion?.(t),t)).catch(t=>{throw this.rejectCompletion?.(t),t})),e}toString(t=!0,e=!1){return`${t?`[${this.id}]`:""}[Transaction][${this.source}.${this.method}${e?"]\nTransaction Log:\n"+this.logs.join("\n"):"]"}`}static contextTransaction(t){if(t&&t.__transactionProxy)return this.contexts.get(t)}wait(){return this.completion}static describeTarget(t){if(null===t||"object"!=typeof t&&"function"!=typeof t)return r(t);const e=t;let i=u.get(e);return i||(i=r(t),u.set(e,i)),i}}class d extends s{get log(){return this._log||(this._log=g.log.for(this)),this._log}logger(t){return this.loggerCache.has(t)||this.loggerCache.set(t,this.log.for(this[t])),this.loggerCache.get(t)}constructor(t=1,e,i){super(),this.counter=t,this.onBegin=e,this.onEnd=i,this.pendingTransactions=[],this.currentTransaction=void 0,this.loggerCache=new Map,this.lock=new c}async submit(t){const e=this.logger("submit");if(await this.lock.acquire(),e.silly("Lock acquired to submit transaction "+t.id),this.currentTransaction&&this.currentTransaction.id===t.id)return this.lock.release(),e.silly("Released lock for re-entrant transaction "+t.id),t.fire();let i;return this.counter>0?(this.counter--,this.lock.release(),e.silly("Released lock for transaction "+t.id),i=this.fireTransaction(t)):(e.debug(`Pushing transaction ${t.id} to the queue`),this.pendingTransactions.push(t),i=t.wait(),this.lock.release(),e.silly("Released lock after queuing transaction "+t.id)),i}async fireTransaction(t){const e=this.logger("fireTransaction");return await this.lock.acquire(),e.silly("Lock acquired obtain transaction "+t.id),this.currentTransaction=t,this.lock.release(),e.silly("Released lock after obtaining "+t.id),this.onBegin&&(e.verbose("Calling onBegin for transaction "+t.id),await this.onBegin()),e.info(`Starting transaction ${t.id}. ${this.pendingTransactions.length} remaining...`),t.fire()}async release(t){const e=this.logger("release");await this.lock.acquire(),this.currentTransaction||e.warn("Trying to release an unexisting transaction. should never happen..."),e.verbose("Releasing transaction "+this.currentTransaction?.toString(!0,!0));const i=this.currentTransaction?.id;if(this.currentTransaction=void 0,this.lock.release(),e.silly("Released lock after clearing transaction "+i),this.onEnd&&(e.verbose("Calling onEnd for transaction "+i),await this.onEnd(t)),await this.lock.acquire(),e.silly(`Acquired lock after completing transaction ${i} for pending transaction verification`),this.pendingTransactions.length>0){const t=this.pendingTransactions.shift(),i=()=>this.fireTransaction.call(this,t).catch(t=>{this.log.for(this.fireTransaction).error(t)});e.silly(`Marking ${t.id} for execution`),o()?setTimeout(i,0):globalThis.process.nextTick(i)}else e.debug("No pending transactions. Incrementing counter."),this.counter++;this.lock.release(),e.silly("Released lock after completing transaction "+i)}}function f(...n){return(s,a,r)=>{if(!r)throw new i("This decorator only applies to methods");return e()(s,a,r),t.set(s.constructor,t.key("transactional",a),{data:n}),r.value=new Proxy(r.value,{apply:async(t,e,i)=>new Promise((r,o)=>{async function c(t,e,i){return!e||e instanceof Error||i||(i=e,e=void 0),await t.release(e),e?o(e):r(i)}const l=i[0],h=(()=>{let t=0;for(;t<i.length&&i[t]instanceof g;)t++;return t})(),u=h>0?i.slice(h):i,d=l instanceof g?l:g.contextTransaction(e);if(d){const i=new g(s.name,a,async()=>{try{return r(await Reflect.apply(t,i.bindToTransaction(e),u))}catch(t){return o(t)}},n.length?n:void 0);d.bindTransaction(i),d.fire()}else{const i=new g(s.name,a,async()=>{try{return c(i,void 0,await Reflect.apply(t,i.bindToTransaction(e),u))}catch(t){return c(i,t)}},n.length?n:void 0);g.submit(i)}})}),r}}const T="##VERSION##",p="##PACKAGE##";t.registerLibrary(p,T);export{c as Lock,p as PACKAGE_NAME,d as SynchronousLock,h as TimeoutError,g as Transaction,l as TransactionalKeys,T as VERSION,f as transactional};
|
|
2
2
|
//# sourceMappingURL=transactional-decorators.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactional-decorators.js","sources":["../src/locks/Lock.ts","../src/locks/SyncronousLock.ts","../src/constants.ts","../src/utils.ts","../src/Transaction.ts","../src/decorators.ts","../src/index.ts"],"sourcesContent":[null,null,null,null,null,null,null],"names":["Lock","constructor","this","queue","locked","execute","func","result","acquire","Promise","resolve","e","release","self","push","next","shift","globalThis","window","process","nextTick","setTimeout","SyncronousLock","counter","onBegin","onEnd","currentTransaction","undefined","lock","pendingTransactions","submit","transaction","then","id","fire","fireTransaction","err","afterConclusionCB","length","cb","TransactionalKeys","REFLECT","TRANSACTIONAL","getObjectName","obj","name","indexOf","toString","Transaction","source","method","action","metadata","Date","now","log","join","issuer","callbackMethod","args","callback","pop","Error","getLock","call","bindToTransaction","setLock","getMetadata","bindTransaction","nextTransaction","bind","transactionalMethods","getAllPropertyDecoratorsRecursive","boundObj","Reflection","getAllProperties","reduce","accum","k","Object","keys","find","o","key","__originalObj","getClassDecorators","DBKeys","ORIGINAL","withId","withLog","transactional","data","target","propertyKey","descriptor","InternalError","originalMethod","value","methodWrapper","reject","updatedTransaction","async","catch","unshift","defineProperty","transactionalSuperCall","VERSION"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"transactional-decorators.js","sources":["../src/locks/Lock.ts","../src/constants.ts","../src/overrides/overrides.ts","../src/errors.ts","../src/Transaction.ts","../src/locks/SynchronousLock.ts","../src/decorators.ts","../src/index.ts"],"sourcesContent":[null,null,null,null,null,null,null,null],"names":["Lock","constructor","this","queue","locked","execute","func","result","acquire","Promise","resolve","e","release","self","push","next","shift","globalThis","window","process","nextTick","setTimeout","TransactionalKeys","TRANSACTIONAL","Metadata","transactionals","obj","meta","get","Object","keys","isTransactional","TimeoutError","InternalError","message","super","name","objectNameCache","WeakMap","Transaction","LoggedClass","debug","globalTimeout","metadataCache","log","Proxy","Logging","for","target","prop","receiver","Reflect","args","contexts","source","method","action","metadata","initialFireDispatched","released","id","Date","now","logs","join","completion","reject","resolveCompletion","rejectCompletion","issuer","issuerName","describeTarget","methodName","transaction","async","l","toString","verbose","JSON","stringify","call","bindToTransaction","submit","run","contextOrRunnable","runnableOrMetadata","maybeMetadata","contextProvided","context","undefined","runnable","Error","rawMetadata","metadataValue","Array","isArray","length","sourceName","caughtError","boundContext","error","setLock","lock","getLock","SynchronousLock","err","getMetadata","getTransactionalMetadata","cached","reservedProps","Set","DBKeys","ORIGINAL","methods","propertyKeys","properties","filter","has","propertyDesignTypes","Map","forEach","type","set","bindTransaction","nextTransaction","bind","getObjectName","transactionalMethods","props","getOwnPropertyNames","add","transactionProps","from","p","value","boundObj","includes","apply","methodTarget","thisArg","argArray","__transactionProxy","__transactionTarget","applyGlobalTimeout","execution","timeoutMs","settled","timer","warn","catch","releaseErr","then","clearTimeout","fire","baseExecution","executeAction","withId","withLog","contextTransaction","wait","key","logger","loggerCache","counter","onBegin","onEnd","pendingTransactions","currentTransaction","silly","resultPromise","fireTransaction","info","cb","isBrowser","transactional","data","propertyKey","descriptor","exitFunction","candidate","transactionPrefixLength","count","invocationArgs","slice","activeTransaction","updatedTransaction","newTransaction","VERSION","PACKAGE_NAME","registerLibrary"],"mappings":"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"}
|
package/lib/Transaction.cjs
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Transaction = void 0;
|
|
4
|
-
const
|
|
5
|
-
const SyncronousLock_1 = require("./locks/SyncronousLock.cjs");
|
|
4
|
+
const SynchronousLock_1 = require("./locks/SynchronousLock.cjs");
|
|
6
5
|
const db_decorators_1 = require("@decaf-ts/db-decorators");
|
|
7
|
-
|
|
8
|
-
const
|
|
6
|
+
require("./overrides/index.cjs");
|
|
7
|
+
const decoration_1 = require("@decaf-ts/decoration");
|
|
8
|
+
const logging_1 = require("@decaf-ts/logging");
|
|
9
|
+
const errors_1 = require("./errors.cjs");
|
|
10
|
+
const objectNameCache = new WeakMap();
|
|
9
11
|
/**
|
|
10
12
|
* @description Core transaction management class
|
|
11
13
|
* @summary Manages transaction lifecycle, including creation, execution, and cleanup. Provides mechanisms for binding transactions to objects and methods, ensuring proper transaction context propagation.
|
|
@@ -50,36 +52,109 @@ const constants_1 = require("./constants.cjs");
|
|
|
50
52
|
* T->>L: release(error?)
|
|
51
53
|
* L-->>C: Return result/error
|
|
52
54
|
*/
|
|
53
|
-
class Transaction {
|
|
55
|
+
class Transaction extends logging_1.LoggedClass {
|
|
56
|
+
static { this.debug = false; }
|
|
57
|
+
static { this.globalTimeout = -1; }
|
|
58
|
+
static { this.metadataCache = new WeakMap(); }
|
|
59
|
+
static { this.log = new Proxy(logging_1.Logging.for(Transaction), {
|
|
60
|
+
get(target, prop, receiver) {
|
|
61
|
+
if (prop !== "log" || Transaction.debug)
|
|
62
|
+
return Reflect.get(target, prop, receiver);
|
|
63
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
64
|
+
return (...args) => {
|
|
65
|
+
// do nothing. ignore the log message the Transaction is not in debug mode
|
|
66
|
+
};
|
|
67
|
+
},
|
|
68
|
+
}); }
|
|
69
|
+
get log() {
|
|
70
|
+
if (!this["_log"]) {
|
|
71
|
+
this["_log"] = Transaction.log;
|
|
72
|
+
}
|
|
73
|
+
return this["_log"];
|
|
74
|
+
}
|
|
75
|
+
static { this.contexts = new WeakMap(); }
|
|
54
76
|
constructor(source, method, action, metadata) {
|
|
77
|
+
super();
|
|
78
|
+
this.initialFireDispatched = false;
|
|
79
|
+
this.released = false;
|
|
55
80
|
this.id = Date.now();
|
|
56
81
|
this.action = action;
|
|
57
82
|
this.method = method;
|
|
58
|
-
this.
|
|
83
|
+
this.logs = [[this.id, source, method].join(" | ")];
|
|
59
84
|
this.source = source;
|
|
60
85
|
this.metadata = metadata;
|
|
86
|
+
this.completion = new Promise((resolve, reject) => {
|
|
87
|
+
this.resolveCompletion = resolve;
|
|
88
|
+
this.rejectCompletion = reject;
|
|
89
|
+
});
|
|
61
90
|
}
|
|
62
91
|
/**
|
|
63
92
|
* @description Queues a transaction for execution
|
|
64
93
|
* @summary Pushes a transaction to the queue and waits for its resolution. Creates a new transaction with the provided issuer and callback method, then submits it to the transaction lock.
|
|
65
94
|
* @param {any} issuer - Any class instance that will be used as 'this' when calling the callbackMethod
|
|
66
|
-
* @param {Function}
|
|
95
|
+
* @param {Function} method - function containing the transaction logic, will be called with the issuer as 'this'
|
|
67
96
|
* @param {any[]} args - Arguments to pass to the method. Last one must be the callback function
|
|
68
97
|
* @return {void}
|
|
69
98
|
*/
|
|
70
|
-
static push(issuer,
|
|
71
|
-
const
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
const
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
.
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
99
|
+
static async push(issuer, method, ...args) {
|
|
100
|
+
const log = this.log.for(this.push);
|
|
101
|
+
const issuerName = Transaction.describeTarget(issuer);
|
|
102
|
+
const methodName = Transaction.describeTarget(method);
|
|
103
|
+
const transaction = new Transaction(issuerName, methodName, async () => {
|
|
104
|
+
const l = log.for(transaction.id.toString());
|
|
105
|
+
try {
|
|
106
|
+
l.verbose(`Executing transaction method ${methodName}`);
|
|
107
|
+
l.debug(`With arguments: ${JSON.stringify(args)}`);
|
|
108
|
+
const result = await Promise.resolve(method.call(transaction.bindToTransaction(issuer), ...args));
|
|
109
|
+
l.verbose(`Transaction method ${methodName} executed successfully`);
|
|
110
|
+
l.debug(`Result: ${JSON.stringify(result)}`);
|
|
111
|
+
await transaction.release();
|
|
112
|
+
l.debug("lock released");
|
|
113
|
+
return result;
|
|
114
|
+
}
|
|
115
|
+
catch (e) {
|
|
116
|
+
await transaction.release(e);
|
|
117
|
+
throw e;
|
|
118
|
+
}
|
|
81
119
|
});
|
|
82
|
-
|
|
120
|
+
log.debug(`Pushing transaction ${transaction.id} for method ${methodName} on issuer ${issuerName}`);
|
|
121
|
+
return Transaction.submit(transaction);
|
|
122
|
+
}
|
|
123
|
+
static async run(contextOrRunnable, runnableOrMetadata, maybeMetadata) {
|
|
124
|
+
const contextProvided = typeof contextOrRunnable !== "function";
|
|
125
|
+
const context = (contextProvided ? contextOrRunnable : undefined);
|
|
126
|
+
const runnable = (contextProvided ? runnableOrMetadata : contextOrRunnable);
|
|
127
|
+
if (typeof runnable !== "function") {
|
|
128
|
+
throw new Error("Transaction.run requires an async function");
|
|
129
|
+
}
|
|
130
|
+
const rawMetadata = contextProvided ? maybeMetadata : runnableOrMetadata;
|
|
131
|
+
const metadataValue = Array.isArray(rawMetadata) && rawMetadata.length
|
|
132
|
+
? rawMetadata
|
|
133
|
+
: undefined;
|
|
134
|
+
const sourceName = context
|
|
135
|
+
? Transaction.describeTarget(context)
|
|
136
|
+
: Transaction.describeTarget(runnable);
|
|
137
|
+
const methodName = Transaction.describeTarget(runnable);
|
|
138
|
+
// eslint-disable-next-line prefer-const
|
|
139
|
+
let transaction;
|
|
140
|
+
const action = async () => {
|
|
141
|
+
let caughtError;
|
|
142
|
+
try {
|
|
143
|
+
const boundContext = context
|
|
144
|
+
? transaction.bindToTransaction(context)
|
|
145
|
+
: undefined;
|
|
146
|
+
return await runnable.call((boundContext ?? transaction));
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
caughtError = error;
|
|
150
|
+
throw error;
|
|
151
|
+
}
|
|
152
|
+
finally {
|
|
153
|
+
await transaction.release(caughtError instanceof Error ? caughtError : undefined);
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
transaction = new Transaction(sourceName, methodName, action, metadataValue);
|
|
157
|
+
return Transaction.submit(transaction);
|
|
83
158
|
}
|
|
84
159
|
/**
|
|
85
160
|
* @description Configures the transaction lock implementation
|
|
@@ -97,7 +172,7 @@ class Transaction {
|
|
|
97
172
|
*/
|
|
98
173
|
static getLock() {
|
|
99
174
|
if (!this.lock)
|
|
100
|
-
this.lock = new
|
|
175
|
+
this.lock = new SynchronousLock_1.SynchronousLock();
|
|
101
176
|
return this.lock;
|
|
102
177
|
}
|
|
103
178
|
/**
|
|
@@ -107,7 +182,7 @@ class Transaction {
|
|
|
107
182
|
* @return {void}
|
|
108
183
|
*/
|
|
109
184
|
static submit(transaction) {
|
|
110
|
-
Transaction.getLock().submit(transaction);
|
|
185
|
+
return Transaction.getLock().submit(transaction);
|
|
111
186
|
}
|
|
112
187
|
/**
|
|
113
188
|
* @description Releases the transaction lock
|
|
@@ -118,6 +193,18 @@ class Transaction {
|
|
|
118
193
|
static async release(err) {
|
|
119
194
|
return Transaction.getLock().release(err);
|
|
120
195
|
}
|
|
196
|
+
/**
|
|
197
|
+
* @description Releases the transaction instance once
|
|
198
|
+
* @summary Ensures the underlying lock is released at most a single time for the transaction
|
|
199
|
+
* @param {Error} [err] - Optional error to propagate to the lock implementation
|
|
200
|
+
* @return {Promise<void>} Resolves once the lock release call finishes or immediately when already released
|
|
201
|
+
*/
|
|
202
|
+
async release(err) {
|
|
203
|
+
if (this.released)
|
|
204
|
+
return;
|
|
205
|
+
this.released = true;
|
|
206
|
+
await Transaction.release(err);
|
|
207
|
+
}
|
|
121
208
|
/**
|
|
122
209
|
* @description Retrieves transaction metadata
|
|
123
210
|
* @summary Returns a copy of the metadata associated with this transaction, ensuring the original metadata remains unmodified
|
|
@@ -126,6 +213,26 @@ class Transaction {
|
|
|
126
213
|
getMetadata() {
|
|
127
214
|
return this.metadata ? [...this.metadata] : undefined;
|
|
128
215
|
}
|
|
216
|
+
static getTransactionalMetadata(target) {
|
|
217
|
+
let cached = this.metadataCache.get(target);
|
|
218
|
+
if (cached)
|
|
219
|
+
return cached;
|
|
220
|
+
const reservedProps = new Set([
|
|
221
|
+
"__transactionProxy",
|
|
222
|
+
"__transactionTarget",
|
|
223
|
+
typeof db_decorators_1.DBKeys.ORIGINAL === "string" ? db_decorators_1.DBKeys.ORIGINAL : "__originalObj",
|
|
224
|
+
]);
|
|
225
|
+
const methods = decoration_1.Metadata.transactionals(target) ?? [];
|
|
226
|
+
const propertyKeys = (decoration_1.Metadata.properties(target) || []).filter((prop) => !reservedProps.has(prop));
|
|
227
|
+
const propertyDesignTypes = new Map();
|
|
228
|
+
propertyKeys.forEach((prop) => {
|
|
229
|
+
const type = decoration_1.Metadata.type(target, prop);
|
|
230
|
+
propertyDesignTypes.set(prop, !!type && decoration_1.Metadata.isTransactional(type));
|
|
231
|
+
});
|
|
232
|
+
cached = { methods, propertyKeys, propertyDesignTypes };
|
|
233
|
+
this.metadataCache.set(target, cached);
|
|
234
|
+
return cached;
|
|
235
|
+
}
|
|
129
236
|
/**
|
|
130
237
|
* @description Links a new transaction to the current one
|
|
131
238
|
* @summary Binds a new transaction operation to the current transaction, transferring logs and binding methods to maintain transaction context
|
|
@@ -133,8 +240,10 @@ class Transaction {
|
|
|
133
240
|
* @return {void}
|
|
134
241
|
*/
|
|
135
242
|
bindTransaction(nextTransaction) {
|
|
136
|
-
|
|
137
|
-
|
|
243
|
+
this.log
|
|
244
|
+
.for(this.bindTransaction)
|
|
245
|
+
.verbose(`Binding the ${nextTransaction.toString()} to ${this}`);
|
|
246
|
+
this.logs.push(...nextTransaction.logs);
|
|
138
247
|
nextTransaction.bindTransaction = this.bindToTransaction.bind(this);
|
|
139
248
|
nextTransaction.bindToTransaction = this.bindToTransaction.bind(this);
|
|
140
249
|
this.action = nextTransaction.action;
|
|
@@ -146,36 +255,94 @@ class Transaction {
|
|
|
146
255
|
* @return {any} The bound object with transaction-aware method wrappers
|
|
147
256
|
*/
|
|
148
257
|
bindToTransaction(obj) {
|
|
149
|
-
const
|
|
150
|
-
|
|
258
|
+
const log = this.log.for(this.bindToTransaction);
|
|
259
|
+
log.verbose(`Binding object ${(0, logging_1.getObjectName)(obj)} to transaction ${this.id}`);
|
|
260
|
+
const metadata = Transaction.getTransactionalMetadata(obj.constructor);
|
|
261
|
+
const transactionalMethods = metadata.methods;
|
|
262
|
+
if (!transactionalMethods.length)
|
|
151
263
|
return obj;
|
|
152
264
|
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
153
265
|
const self = this;
|
|
154
|
-
const
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
266
|
+
const reservedProps = new Set([
|
|
267
|
+
"__transactionProxy",
|
|
268
|
+
"__transactionTarget",
|
|
269
|
+
typeof db_decorators_1.DBKeys.ORIGINAL === "string" ? db_decorators_1.DBKeys.ORIGINAL : "__originalObj",
|
|
270
|
+
]);
|
|
271
|
+
const props = new Set(metadata.propertyKeys);
|
|
272
|
+
Object.getOwnPropertyNames(obj).forEach((prop) => {
|
|
273
|
+
if (!reservedProps.has(prop))
|
|
274
|
+
props.add(prop);
|
|
275
|
+
});
|
|
276
|
+
const transactionProps = Array.from(props).filter((p) => {
|
|
277
|
+
if (metadata.propertyDesignTypes.get(p))
|
|
278
|
+
return true;
|
|
279
|
+
const value = obj[p];
|
|
280
|
+
if (value &&
|
|
281
|
+
(typeof value === "object" || typeof value === "function") &&
|
|
282
|
+
decoration_1.Metadata.isTransactional(value.constructor)) {
|
|
283
|
+
return true;
|
|
168
284
|
}
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
285
|
+
return false;
|
|
286
|
+
});
|
|
287
|
+
log.debug(`found transaction methods: ${transactionalMethods.join(", ")} and properties: ${transactionProps.join(", ")}`);
|
|
288
|
+
const boundObj = new Proxy(obj, {
|
|
289
|
+
get(target, prop, receiver) {
|
|
290
|
+
if (transactionalMethods.includes(prop))
|
|
291
|
+
return new Proxy(target[prop], {
|
|
292
|
+
apply(methodTarget, thisArg, argArray) {
|
|
293
|
+
return Reflect.apply(methodTarget, thisArg, [self, ...argArray]);
|
|
294
|
+
},
|
|
295
|
+
});
|
|
296
|
+
if (transactionProps.includes(prop))
|
|
297
|
+
return self.bindToTransaction(target[prop]);
|
|
298
|
+
return Reflect.get(target, prop, receiver);
|
|
299
|
+
},
|
|
300
|
+
});
|
|
301
|
+
boundObj[db_decorators_1.DBKeys.ORIGINAL] =
|
|
302
|
+
obj[db_decorators_1.DBKeys.ORIGINAL] || obj;
|
|
303
|
+
boundObj.toString = () => (0, logging_1.getObjectName)(boundObj[db_decorators_1.DBKeys.ORIGINAL]) +
|
|
175
304
|
" proxy for transaction " +
|
|
176
305
|
this.id;
|
|
306
|
+
boundObj.__transactionProxy = true;
|
|
307
|
+
boundObj.__transactionTarget =
|
|
308
|
+
obj.__transactionTarget || obj;
|
|
309
|
+
Transaction.contexts.set(boundObj, self);
|
|
177
310
|
return boundObj;
|
|
178
311
|
}
|
|
312
|
+
/**
|
|
313
|
+
* @description Applies the global timeout to the provided Promise, if configured
|
|
314
|
+
* @param {Promise<R>} execution - Transaction execution promise
|
|
315
|
+
* @return {Promise<R>} Promise that respects the configured global timeout
|
|
316
|
+
* @private
|
|
317
|
+
*/
|
|
318
|
+
applyGlobalTimeout(execution) {
|
|
319
|
+
if (Transaction.globalTimeout <= 0)
|
|
320
|
+
return execution;
|
|
321
|
+
const timeoutMs = Transaction.globalTimeout;
|
|
322
|
+
const log = this.log.for(this.applyGlobalTimeout);
|
|
323
|
+
return new Promise((resolve, reject) => {
|
|
324
|
+
let settled = false;
|
|
325
|
+
const timer = setTimeout(() => {
|
|
326
|
+
if (settled)
|
|
327
|
+
return;
|
|
328
|
+
const error = new errors_1.TimeoutError(`Transaction ${this.toString()} exceeded timeout of ${timeoutMs}ms`);
|
|
329
|
+
log.warn(error.message);
|
|
330
|
+
this.release(error).catch((releaseErr) => log.error(releaseErr));
|
|
331
|
+
reject(error);
|
|
332
|
+
}, timeoutMs);
|
|
333
|
+
execution
|
|
334
|
+
.then((value) => {
|
|
335
|
+
settled = true;
|
|
336
|
+
clearTimeout(timer);
|
|
337
|
+
resolve(value);
|
|
338
|
+
})
|
|
339
|
+
.catch((err) => {
|
|
340
|
+
settled = true;
|
|
341
|
+
clearTimeout(timer);
|
|
342
|
+
reject(err);
|
|
343
|
+
});
|
|
344
|
+
});
|
|
345
|
+
}
|
|
179
346
|
/**
|
|
180
347
|
* @description Executes the transaction action
|
|
181
348
|
* @summary Fires the transaction by executing its associated action function, throwing an error if no action is defined
|
|
@@ -184,7 +351,26 @@ class Transaction {
|
|
|
184
351
|
fire() {
|
|
185
352
|
if (!this.action)
|
|
186
353
|
throw new Error(`Missing the method`);
|
|
187
|
-
|
|
354
|
+
const executeAction = async () => {
|
|
355
|
+
return this.action ? await this.action() : undefined;
|
|
356
|
+
};
|
|
357
|
+
const baseExecution = executeAction();
|
|
358
|
+
const execution = Transaction.globalTimeout > 0
|
|
359
|
+
? this.applyGlobalTimeout(baseExecution)
|
|
360
|
+
: baseExecution;
|
|
361
|
+
if (!this.initialFireDispatched) {
|
|
362
|
+
this.initialFireDispatched = true;
|
|
363
|
+
execution
|
|
364
|
+
.then((result) => {
|
|
365
|
+
this.resolveCompletion?.(result);
|
|
366
|
+
return result;
|
|
367
|
+
})
|
|
368
|
+
.catch((err) => {
|
|
369
|
+
this.rejectCompletion?.(err);
|
|
370
|
+
throw err;
|
|
371
|
+
});
|
|
372
|
+
}
|
|
373
|
+
return execution;
|
|
188
374
|
}
|
|
189
375
|
/**
|
|
190
376
|
* @description Provides a string representation of the transaction
|
|
@@ -194,17 +380,29 @@ class Transaction {
|
|
|
194
380
|
* @return {string} A string representation of the transaction
|
|
195
381
|
*/
|
|
196
382
|
toString(withId = true, withLog = false) {
|
|
197
|
-
return `${withId ? `[${this.id}]` : ""}[Transaction][${this.source}.${this.method}${withLog ? `]\nTransaction Log:\n${this.
|
|
383
|
+
return `${withId ? `[${this.id}]` : ""}[Transaction][${this.source}.${this.method}${withLog ? `]\nTransaction Log:\n${this.logs.join("\n")}` : "]"}`;
|
|
198
384
|
}
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
385
|
+
static contextTransaction(context) {
|
|
386
|
+
if (!context || !context.__transactionProxy) {
|
|
387
|
+
return undefined;
|
|
388
|
+
}
|
|
389
|
+
return this.contexts.get(context);
|
|
390
|
+
}
|
|
391
|
+
wait() {
|
|
392
|
+
return this.completion;
|
|
393
|
+
}
|
|
394
|
+
static describeTarget(target) {
|
|
395
|
+
if (target === null ||
|
|
396
|
+
(typeof target !== "object" && typeof target !== "function")) {
|
|
397
|
+
return (0, logging_1.getObjectName)(target);
|
|
398
|
+
}
|
|
399
|
+
const key = target;
|
|
400
|
+
let cached = objectNameCache.get(key);
|
|
401
|
+
if (!cached) {
|
|
402
|
+
cached = (0, logging_1.getObjectName)(target);
|
|
403
|
+
objectNameCache.set(key, cached);
|
|
404
|
+
}
|
|
405
|
+
return cached;
|
|
208
406
|
}
|
|
209
407
|
}
|
|
210
408
|
exports.Transaction = Transaction;
|