@autofleet/sequelize-utils 6.0.2 → 6.1.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/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -4
- package/dist/index.d.ts +5 -4
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +8 -4
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));const c=s(require(`@autofleet/
|
|
1
|
+
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));const c=s(require(`@autofleet/logger`)),l=s(require(`sequelize`)),u=s(require(`debug`)),d=(0,c.default)();var f=d;const p=async(e,t)=>{t.transaction?t.transaction.afterCommit(()=>e()):await e()};var m=p;const h=e=>e instanceof Date||Object.prototype.toString.call(e)===`[object Date]`,g=e=>{let t={...e};return Object.entries(t).filter(([,e])=>h(e)).forEach(([e,n])=>{t[e]=n.getTime()/1e3}),t},_=(e,t,n,r)=>{if(!n){r.warn(`Events object must be provided to addModelEventHooks`);return}let i=(e,i=!1)=>{let a=r||f;try{let r=e.get();i&&Object.assign(r,{deletedAt:new Date});let o=t[e.constructor.name]?.tableName,s=`1`,c=g(r);if(!o)return;n.sendObject(o,s,c,Object.keys(e.rawAttributes)).catch(e=>{a.error(`sendObject error`,{tableName:o,eventVersion:s,e})})}catch(e){a.error(`dimTables error`,{e})}};e.addHook(`afterSave`,(e,t)=>m(()=>i(e),t)),e.addHook(`afterDestroy`,(e,t)=>m(()=>i(e,!0),t))};var v=_;const y=(0,u.default)(`sequelize-utils`),b=async(e,t,n=2,r={})=>{if(typeof t!=`function`)throw Error(`funcToRun must be a function`);if(typeof n!=`number`)throw Error(`if defined, retriesCount must be a number`);if(n<0)throw Error(`retriesCount must be a positive number`);try{let n=await e.transaction(r,async e=>{let n=await t(e);return n});return n}catch(i){if((i instanceof l.DatabaseError||i?.constructor?.name===`DatabaseError`)&&--n>=0)return y(`error inside transactionWithRetry - will retry times ${n}`,i),b(e,t,n,r);throw n===-1&&y(`error inside transactionWithRetry - will stop retry`,i),i}},x=`rollback has been called on this transaction`,S=`Transaction cancelled due to request cancellation`,C=(e,t,n,r)=>{let i=!1;if(t.socket.destroyed)throw y(S),Error(S);return e.transaction(async e=>{let a=async()=>{y(S),!i&&(i=!0,await e.rollback())},o=async()=>{let t=!n.writableFinished;if(t){if(y(S),i)return;i=!0,await e.rollback()}};t.socket.once(`close`,a),n.once(`close`,o);let s=()=>{t.socket.removeListener(`close`,a),n.removeListener(`close`,o)};try{let t=await r(e);return s(),t}catch(e){throw s(),e.message.includes(x)?Error(S):e}})};var w=(e,t)=>{let n=(t,n,r)=>b(e,t,n,r),r=(t,n,r)=>C(e,t,n,r),i=(n,r)=>v(e,n,r,t),a=(e,t)=>e?t(e):n(t,0);return{httpBasedTransaction:r,transactionWithRetry:n,registerModelEventHooks:i,runAfterTransactionCommits:m,useOrCreateTransaction:a}};module.exports=w;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["Events","cb: () => unknown","options: Transactionable","input: unknown","obj: object","sequelize: Sequelize","modelTableMapping: ModelMapping","object: Model","events","logger","sequelize","runAfterTransactionCommits","sequelize: Sequelize","funcToRun: (transaction: Transaction) => Promise<T>","options: TransactionOptions","sequelize","DatabaseError","sequelize: Sequelize","req: IncomingMessage","res: ServerResponse","cb: (transaction: Transaction) => Promise<T>","sequelize","transaction: Transaction","sequelize: Sequelize","transactionWithRetry","funcToRun: (transaction: Transaction) => Promise<T>","retriesCount?: number","options?: TransactionOptions","_transactionWithRetry","sequelize","httpBasedTransaction","req: IncomingMessage","res: ServerResponse","cb: (transaction: Transaction) => Promise<T>","_httpBasedTransaction","modelTableMapping: ModelMapping","addModelEventHooks","transaction: Transaction","cb: (t: Transaction) => Promise<T>"],"sources":["../src/logger.ts","../src/events/index.ts","../src/runAfterTransactionCommits.ts","../src/model-event-hooks.ts","../src/common.ts","../src/transaction-with-retry.ts","../src/http-based-transaction.ts","../src/index.ts"],"sourcesContent":["import Logger from '@autofleet/logger';\n\nexport default Logger();\n","import Events from '@autofleet/events';\nimport logger from '../logger';\n\nexport default new Events({ logger });\n","import { Transactionable } from 'sequelize';\n\nconst runAfterTransactionCommits = async (cb: () => unknown, options: Transactionable): Promise<void> => {\n if (options.transaction) {\n options.transaction.afterCommit(() => cb());\n } else {\n await cb();\n }\n};\nexport default runAfterTransactionCommits;\n","import type { Model, Sequelize } from 'sequelize';\nimport events from './events';\nimport logger from './logger';\nimport runAfterTransactionCommits from './runAfterTransactionCommits';\n\nexport interface ModelMapping {\n [ModelName: string]: {\n tableName: string\n };\n}\nconst isDate = (input: unknown): input is Date => input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';\n// eslint-disable-next-line @typescript-eslint/ban-types\nconst formatDatesInObject = (obj: object) => {\n const newObj = { ...obj };\n Object.entries(newObj).filter(([, value]) => isDate(value)).forEach(([key, value]) => {\n newObj[key] = (value as Date).getTime() / 1000;\n });\n return newObj;\n};\n\nconst addModelEventHooks = (sequelize: Sequelize, modelTableMapping: ModelMapping): void => {\n const updateEventToDimTable = (object: Model, isDelete = false) => {\n try {\n const objectToSend = object.get();\n if (isDelete) {\n Object.assign(objectToSend, { deletedAt: new Date() });\n }\n const tableName = modelTableMapping[object.constructor.name]?.tableName;\n const eventVersion = '1';\n const objectToSendFormatted = formatDatesInObject(objectToSend);\n if (!tableName) {\n return;\n }\n events.sendObject(\n tableName,\n eventVersion,\n objectToSendFormatted,\n // @ts-expect-error the rawAttributes is typed as static, while it actually is on the instance level.\n Object.keys(object.rawAttributes),\n ).catch((e) => {\n logger.error('sendObject error', { tableName, eventVersion, e });\n });\n } catch (e) {\n logger.error('dimTables error', { e });\n }\n };\n\n sequelize.addHook('afterSave', (savedObject, options) => runAfterTransactionCommits(() => updateEventToDimTable(savedObject), options));\n sequelize.addHook('afterDestroy', (savedObject, options) => runAfterTransactionCommits(() => updateEventToDimTable(savedObject, true), options));\n};\n\nexport default addModelEventHooks;\n","import debug from 'debug';\n\nexport const debugLog = debug('sequelize-utils');\n","import {\n DatabaseError, type Sequelize, type Transaction, type TransactionOptions,\n} from 'sequelize';\nimport { debugLog } from './common';\n\nexport const transactionWithRetry = async <T>(sequelize: Sequelize, funcToRun: (transaction: Transaction) => Promise<T>, retriesCount = 2, options: TransactionOptions = {}): Promise<T> => {\n if (typeof funcToRun !== 'function') {\n throw new Error('funcToRun must be a function');\n }\n if (typeof retriesCount !== 'number') {\n throw new Error('if defined, retriesCount must be a number');\n }\n if (retriesCount < 0) {\n throw new Error('retriesCount must be a positive number');\n }\n try {\n const transValue = await sequelize.transaction(options, async (transaction) => {\n const funcValue = await funcToRun(transaction);\n return funcValue;\n });\n return transValue;\n } catch (e) {\n if ((e instanceof DatabaseError || e?.constructor?.name === 'DatabaseError') && --retriesCount >= 0) {\n debugLog(`error inside transactionWithRetry - will retry times ${retriesCount}`, e);\n return transactionWithRetry(sequelize, funcToRun, retriesCount, options);\n }\n if (retriesCount === -1) {\n debugLog('error inside transactionWithRetry - will stop retry', e);\n }\n throw e;\n }\n};\n","import type { IncomingMessage, ServerResponse } from 'node:http';\nimport type { Sequelize, Transaction } from 'sequelize';\nimport { debugLog } from './common';\n\nconst rollbackErrorText = 'rollback has been called on this transaction';\nconst abortErrorText = 'Transaction cancelled due to request cancellation';\n\nexport const httpBasedTransaction = <T>(sequelize: Sequelize, req: IncomingMessage, res: ServerResponse, cb: (transaction: Transaction) => Promise<T>): Promise<T> => {\n let aborted = false;\n if (req.socket.destroyed) {\n debugLog(abortErrorText);\n throw new Error(abortErrorText);\n }\n return sequelize.transaction(async (transaction: Transaction) => {\n // https://github.com/nodejs/node/blob/e46c680bf2b211bbd52cf959ca17ee98c7f657f5/test/parallel/test-http-aborted.js#L9\n\n // 2023-04-13: Node.js 16.0.0\n // Added also the `res.writableFinished` check, because it seems that the socket is not destroyed when the request is aborted, but the response is not finished.\n // https://github.com/Jimbly/http-proxy-node16/commit/ba0c414cd03799e357c5d867c11dea06a9c34ec8#diff-b2d1e3b7c5f3b424a0af7971c582c822fd25a5ea279040ef6dc93fc4b2cf619dR151\n\n const rollback = async () => {\n debugLog(abortErrorText);\n if (aborted) return;\n aborted = true;\n await transaction.rollback();\n };\n const resRollback = async () => {\n const didNotFinishWrite = !res.writableFinished;\n if (didNotFinishWrite) {\n debugLog(abortErrorText);\n if (aborted) return;\n aborted = true;\n await transaction.rollback();\n }\n };\n req.socket.once('close', rollback);\n res.once('close', resRollback);\n\n const removeListeners = () => {\n req.socket.removeListener('close', rollback);\n res.removeListener('close', resRollback);\n };\n\n try {\n const response = await cb(transaction);\n removeListeners();\n return response;\n } catch (e) {\n removeListeners();\n if (e.message.includes(rollbackErrorText)) {\n throw new Error(abortErrorText);\n }\n throw e;\n }\n });\n};\n","/* eslint-disable import/prefer-default-export */\nimport type {\n Sequelize,\n Transaction,\n TransactionOptions,\n} from 'sequelize';\nimport type { IncomingMessage, ServerResponse } from 'node:http';\nimport addModelEventHooks, { ModelMapping } from './model-event-hooks';\nimport { transactionWithRetry as _transactionWithRetry } from './transaction-with-retry';\nimport { httpBasedTransaction as _httpBasedTransaction } from './http-based-transaction';\nimport runAfterTransactionCommits from './runAfterTransactionCommits';\n\ntype ArgsWithoutSequelize<T> = T extends (arg1: Sequelize, ...args: infer U) => unknown ? U : never;\n\nexport default (sequelize: Sequelize): {\n transactionWithRetry: <T>(...args: ArgsWithoutSequelize<typeof _transactionWithRetry<T>>) => Promise<T>;\n httpBasedTransaction: <T>(...args: ArgsWithoutSequelize<typeof _httpBasedTransaction<T>>) => Promise<T>;\n registerModelEventHooks: (...args: ArgsWithoutSequelize<typeof addModelEventHooks>) => void;\n runAfterTransactionCommits: typeof runAfterTransactionCommits;\n useOrCreateTransaction: <T>(transaction: Transaction, cb: (t: Transaction) => Promise<T>) => Promise<T>;\n} => {\n const transactionWithRetry = <T>(funcToRun: (transaction: Transaction) => Promise<T>, retriesCount?: number, options?: TransactionOptions): Promise<T> => _transactionWithRetry(sequelize, funcToRun, retriesCount, options);\n const httpBasedTransaction = <T>(req: IncomingMessage, res: ServerResponse, cb: (transaction: Transaction) => Promise<T>): Promise<T> => _httpBasedTransaction(sequelize, req, res, cb);\n const registerModelEventHooks = (modelTableMapping: ModelMapping) => addModelEventHooks(sequelize, modelTableMapping);\n const useOrCreateTransaction = <T>(transaction: Transaction, cb: (t: Transaction) => Promise<T>) => {\n if (transaction) {\n return cb(transaction);\n }\n return transactionWithRetry(cb, 0);\n };\n\n return {\n httpBasedTransaction,\n transactionWithRetry,\n registerModelEventHooks,\n runAfterTransactionCommits,\n useOrCreateTransaction,\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["defaultExport: LoggerInstanceManager","cb: () => void | Promise<void>","options: Transactionable","input: unknown","obj: object","sequelize: Sequelize","modelTableMapping: ModelMapping","events: Events","logger?: LoggerInstanceManager","object: Model","packageLogger","sequelize","runAfterTransactionCommits","debugLog: debug.Debugger","sequelize: Sequelize","funcToRun: (transaction: Transaction) => Promise<T>","options: TransactionOptions","sequelize","DatabaseError","sequelize: Sequelize","req: IncomingMessage","res: ServerResponse","cb: (transaction: Transaction) => Promise<T>","sequelize","transaction: Transaction","sequelize: Sequelize","logger?: LoggerInstanceManager","transactionWithRetry","funcToRun: (transaction: Transaction) => Promise<T>","retriesCount?: number","options?: TransactionOptions","_transactionWithRetry","sequelize","httpBasedTransaction","req: IncomingMessage","res: ServerResponse","cb: (transaction: Transaction) => Promise<T>","_httpBasedTransaction","modelTableMapping: ModelMapping","events: Events","addModelEventHooks","transaction: Transaction","cb: (t: Transaction) => Promise<T>"],"sources":["../src/logger.ts","../src/runAfterTransactionCommits.ts","../src/model-event-hooks.ts","../src/common.ts","../src/transaction-with-retry.ts","../src/http-based-transaction.ts","../src/index.ts"],"sourcesContent":["import Logger, { LoggerInstanceManager } from '@autofleet/logger';\n\nconst defaultExport: LoggerInstanceManager = Logger();\nexport default defaultExport;\n","import { Transactionable } from 'sequelize';\n\nconst runAfterTransactionCommits = async (cb: () => void | Promise<void>, options: Transactionable): Promise<void> => {\n if (options.transaction) {\n options.transaction.afterCommit(() => cb());\n } else {\n await cb();\n }\n};\nexport default runAfterTransactionCommits;\n","import type { Model, Sequelize } from 'sequelize';\nimport type Events from '@autofleet/events';\nimport type { LoggerInstanceManager } from '@autofleet/logger';\nimport packageLogger from './logger';\nimport runAfterTransactionCommits from './runAfterTransactionCommits';\n\nexport interface ModelMapping {\n [ModelName: string]: {\n tableName: string\n };\n}\nconst isDate = (input: unknown): input is Date => input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';\n// eslint-disable-next-line @typescript-eslint/ban-types\nconst formatDatesInObject = (obj: object) => {\n const newObj = { ...obj };\n Object.entries(newObj).filter(([, value]) => isDate(value)).forEach(([key, value]) => {\n newObj[key] = (value as Date).getTime() / 1000;\n });\n return newObj;\n};\n\nconst addModelEventHooks = (sequelize: Sequelize, modelTableMapping: ModelMapping, events: Events, logger?: LoggerInstanceManager): void => {\n if (!events) {\n logger.warn('Events object must be provided to addModelEventHooks');\n return;\n }\n const updateEventToDimTable = (object: Model, isDelete = false) => {\n const localLogger = logger || packageLogger;\n try {\n const objectToSend = object.get();\n if (isDelete) {\n Object.assign(objectToSend, { deletedAt: new Date() });\n }\n const tableName = modelTableMapping[object.constructor.name]?.tableName;\n const eventVersion = '1';\n const objectToSendFormatted = formatDatesInObject(objectToSend);\n if (!tableName) {\n return;\n }\n events.sendObject(\n tableName,\n eventVersion,\n objectToSendFormatted,\n // @ts-expect-error the rawAttributes is typed as static, while it actually is on the instance level.\n Object.keys(object.rawAttributes),\n ).catch((e) => {\n localLogger.error('sendObject error', { tableName, eventVersion, e });\n });\n } catch (e) {\n localLogger.error('dimTables error', { e });\n }\n };\n\n sequelize.addHook('afterSave', (savedObject, options) => runAfterTransactionCommits(() => updateEventToDimTable(savedObject), options));\n sequelize.addHook('afterDestroy', (savedObject, options) => runAfterTransactionCommits(() => updateEventToDimTable(savedObject, true), options));\n};\n\nexport default addModelEventHooks;\n","import debug from 'debug';\n\nexport const debugLog: debug.Debugger = debug('sequelize-utils');\n","import {\n DatabaseError, type Sequelize, type Transaction, type TransactionOptions,\n} from 'sequelize';\nimport { debugLog } from './common';\n\nexport const transactionWithRetry = async <T>(sequelize: Sequelize, funcToRun: (transaction: Transaction) => Promise<T>, retriesCount = 2, options: TransactionOptions = {}): Promise<T> => {\n if (typeof funcToRun !== 'function') {\n throw new Error('funcToRun must be a function');\n }\n if (typeof retriesCount !== 'number') {\n throw new Error('if defined, retriesCount must be a number');\n }\n if (retriesCount < 0) {\n throw new Error('retriesCount must be a positive number');\n }\n try {\n const transValue = await sequelize.transaction(options, async (transaction) => {\n const funcValue = await funcToRun(transaction);\n return funcValue;\n });\n return transValue;\n } catch (e) {\n if ((e instanceof DatabaseError || e?.constructor?.name === 'DatabaseError') && --retriesCount >= 0) {\n debugLog(`error inside transactionWithRetry - will retry times ${retriesCount}`, e);\n return transactionWithRetry(sequelize, funcToRun, retriesCount, options);\n }\n if (retriesCount === -1) {\n debugLog('error inside transactionWithRetry - will stop retry', e);\n }\n throw e;\n }\n};\n","import type { IncomingMessage, ServerResponse } from 'node:http';\nimport type { Sequelize, Transaction } from 'sequelize';\nimport { debugLog } from './common';\n\nconst rollbackErrorText = 'rollback has been called on this transaction';\nconst abortErrorText = 'Transaction cancelled due to request cancellation';\n\nexport const httpBasedTransaction = <T>(sequelize: Sequelize, req: IncomingMessage, res: ServerResponse, cb: (transaction: Transaction) => Promise<T>): Promise<T> => {\n let aborted = false;\n if (req.socket.destroyed) {\n debugLog(abortErrorText);\n throw new Error(abortErrorText);\n }\n return sequelize.transaction(async (transaction: Transaction) => {\n // https://github.com/nodejs/node/blob/e46c680bf2b211bbd52cf959ca17ee98c7f657f5/test/parallel/test-http-aborted.js#L9\n\n // 2023-04-13: Node.js 16.0.0\n // Added also the `res.writableFinished` check, because it seems that the socket is not destroyed when the request is aborted, but the response is not finished.\n // https://github.com/Jimbly/http-proxy-node16/commit/ba0c414cd03799e357c5d867c11dea06a9c34ec8#diff-b2d1e3b7c5f3b424a0af7971c582c822fd25a5ea279040ef6dc93fc4b2cf619dR151\n\n const rollback = async () => {\n debugLog(abortErrorText);\n if (aborted) return;\n aborted = true;\n await transaction.rollback();\n };\n const resRollback = async () => {\n const didNotFinishWrite = !res.writableFinished;\n if (didNotFinishWrite) {\n debugLog(abortErrorText);\n if (aborted) return;\n aborted = true;\n await transaction.rollback();\n }\n };\n req.socket.once('close', rollback);\n res.once('close', resRollback);\n\n const removeListeners = () => {\n req.socket.removeListener('close', rollback);\n res.removeListener('close', resRollback);\n };\n\n try {\n const response = await cb(transaction);\n removeListeners();\n return response;\n } catch (e) {\n removeListeners();\n if (e.message.includes(rollbackErrorText)) {\n throw new Error(abortErrorText);\n }\n throw e;\n }\n });\n};\n","/* eslint-disable import/prefer-default-export */\nimport type {\n Sequelize,\n Transaction,\n TransactionOptions,\n} from 'sequelize';\nimport type { IncomingMessage, ServerResponse } from 'node:http';\nimport type { LoggerInstanceManager } from '@autofleet/logger';\nimport type Events from '@autofleet/events';\nimport addModelEventHooks, { ModelMapping } from './model-event-hooks';\nimport { transactionWithRetry as _transactionWithRetry } from './transaction-with-retry';\nimport { httpBasedTransaction as _httpBasedTransaction } from './http-based-transaction';\nimport runAfterTransactionCommits from './runAfterTransactionCommits';\n\ntype ArgsWithoutSequelize<T> = T extends (arg1: Sequelize, ...args: infer U) => unknown ? U : never;\n\nexport default (sequelize: Sequelize, logger?: LoggerInstanceManager): {\n transactionWithRetry: <T>(...args: ArgsWithoutSequelize<typeof _transactionWithRetry<T>>) => Promise<T>;\n httpBasedTransaction: <T>(...args: ArgsWithoutSequelize<typeof _httpBasedTransaction<T>>) => Promise<T>;\n registerModelEventHooks: (modelTableMapping: ModelMapping, events: Events) => void;\n runAfterTransactionCommits: typeof runAfterTransactionCommits;\n useOrCreateTransaction: <T>(transaction: Transaction, cb: (t: Transaction) => Promise<T>) => Promise<T>;\n} => {\n const transactionWithRetry = <T>(funcToRun: (transaction: Transaction) => Promise<T>, retriesCount?: number, options?: TransactionOptions): Promise<T> => _transactionWithRetry(sequelize, funcToRun, retriesCount, options);\n const httpBasedTransaction = <T>(req: IncomingMessage, res: ServerResponse, cb: (transaction: Transaction) => Promise<T>): Promise<T> => _httpBasedTransaction(sequelize, req, res, cb);\n const registerModelEventHooks = (modelTableMapping: ModelMapping, events: Events) => addModelEventHooks(sequelize, modelTableMapping, events, logger);\n const useOrCreateTransaction = <T>(transaction: Transaction, cb: (t: Transaction) => Promise<T>) => {\n if (transaction) {\n return cb(transaction);\n }\n return transactionWithRetry(cb, 0);\n };\n\n return {\n httpBasedTransaction,\n transactionWithRetry,\n registerModelEventHooks,\n runAfterTransactionCommits,\n useOrCreateTransaction,\n };\n};\n"],"mappings":"sjBAEMA,GAAAA,EAAAA,EAAAA,UAA+C,CACrD,IAAA,EAAe,ECDf,MAAM,EAA6B,MAAOC,EAAgCC,IAA4C,CAChH,EAAQ,YACV,EAAQ,YAAY,YAAY,IAAM,GAAI,CAAC,CAE3C,MAAM,GAAI,AAEb,EACD,IAAA,EAAe,ECEf,MAAM,EAAS,AAACC,GAAkC,aAAiB,MAAQ,OAAO,UAAU,SAAS,KAAK,EAAM,GAAK,gBAE/G,EAAsB,AAACC,GAAgB,CAC3C,IAAM,EAAS,CAAE,GAAG,CAAK,EAIzB,OAHA,OAAO,QAAQ,EAAO,CAAC,OAAO,CAAC,EAAG,EAAM,GAAK,EAAO,EAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAK,EAAM,GAAK,CACpF,EAAO,GAAQ,EAAe,SAAS,CAAG,GAC3C,EAAC,CACK,CACR,EAEK,EAAqB,CAACqB,EAAsBa,EAAiCC,EAAgBb,IAAyC,CAC1I,GAAI,CAAC,EAAQ,CACX,EAAO,KAAK,uDAAuD,CACnE,MACD,CACD,IAAM,EAAwB,CAACjB,EAAe,EAAW,KAAU,CACjE,IAAM,EAAc,GAAUC,EAC9B,GAAI,CACF,IAAM,EAAe,EAAO,KAAK,CAC7B,GACF,OAAO,OAAO,EAAc,CAAE,UAAW,IAAI,IAAQ,EAAC,CAExD,IAAM,EAAY,EAAkB,EAAO,YAAY,OAAO,UACxD,EAAe,IACf,EAAwB,EAAoB,EAAa,CAC/D,GAAI,CAAC,EACH,OAEF,EAAO,WACL,EACA,EACA,EAEA,OAAO,KAAK,EAAO,cAAc,CAClC,CAAC,MAAM,AAAC,GAAM,CACb,EAAY,MAAM,mBAAoB,CAAE,YAAW,eAAc,CAAG,EAAC,AACtE,EAAC,AACH,OAAQ,EAAG,CACV,EAAY,MAAM,kBAAmB,CAAE,CAAG,EAAC,AAC5C,CACF,EAEDsB,EAAU,QAAQ,YAAa,CAAC,EAAa,IAAYpB,EAA2B,IAAM,EAAsB,EAAY,CAAE,EAAQ,CAAC,CACvIoB,EAAU,QAAQ,eAAgB,CAAC,EAAa,IAAYpB,EAA2B,IAAM,EAAsB,EAAa,GAAK,CAAE,EAAQ,CAAC,AACjJ,EAED,IAAA,EAAe,ECvDf,MAAaC,GAAAA,EAAAA,EAAAA,SAAiC,kBAAkB,CCGnD,EAAuB,MAAUY,EAAsBG,EAAqD,EAAe,EAAGZ,EAA8B,CAAE,IAAiB,CAC1L,GAAI,OAAO,GAAc,WACvB,MAAU,MAAM,+BAAA,CAElB,GAAI,OAAO,GAAiB,SAC1B,MAAU,MAAM,4CAAA,CAElB,GAAI,EAAe,EACjB,MAAU,MAAM,yCAAA,CAElB,GAAI,CACF,IAAM,EAAa,MAAMgB,EAAU,YAAY,EAAS,MAAO,GAAgB,CAC7E,IAAM,EAAY,MAAM,EAAU,EAAY,CAC9C,OAAO,CACR,EAAC,CACF,OAAO,CACR,OAAQ,EAAG,CACV,IAAK,aAAad,EAAAA,eAAiB,GAAG,aAAa,OAAS,kBAAoB,EAAE,GAAgB,EAEhG,OADA,EAAS,CAAC,qDAAqD,EAAE,GAAc,CAAE,EAAE,CAC5E,EAAqBc,EAAW,EAAW,EAAc,EAAQ,CAK1E,MAHI,IAAiB,IACnB,EAAS,sDAAuD,EAAE,CAE9D,CACP,CACF,EC3BK,EAAoB,+CACpB,EAAiB,oDAEV,EAAuB,CAAIP,EAAsBS,EAAsBC,EAAqBC,IAA6D,CACpK,IAAI,EAAU,GACd,GAAI,EAAI,OAAO,UAEb,MADA,EAAS,EAAe,CACd,MAAM,EAAA,CAElB,OAAOJ,EAAU,YAAY,MAAOS,GAA6B,CAO/D,IAAM,EAAW,SAAY,CAC3B,EAAS,EAAe,CACpB,KACJ,EAAU,GACV,MAAM,EAAY,UAAU,CAC7B,EACK,EAAc,SAAY,CAC9B,IAAM,EAAoB,CAAC,EAAI,iBAC/B,GAAI,EAAmB,CAErB,GADA,EAAS,EAAe,CACpB,EAAS,OACb,EAAU,GACV,MAAM,EAAY,UAAU,AAC7B,CACF,EACD,EAAI,OAAO,KAAK,QAAS,EAAS,CAClC,EAAI,KAAK,QAAS,EAAY,CAE9B,IAAM,EAAkB,IAAM,CAC5B,EAAI,OAAO,eAAe,QAAS,EAAS,CAC5C,EAAI,eAAe,QAAS,EAAY,AACzC,EAED,GAAI,CACF,IAAM,EAAW,MAAM,EAAG,EAAY,CAEtC,OADA,GAAiB,CACV,CACR,OAAQ,EAAG,CAKV,MAJA,GAAiB,CACb,EAAE,QAAQ,SAAS,EAAkB,CAC7B,MAAM,EAAA,CAEZ,CACP,CACF,EAAC,AACH,ECvCD,IAAA,EAAe,CAAChB,EAAsBC,IAMjC,CACH,IAAMC,EAAuB,CAAIC,EAAqDC,EAAuBC,IAA6CC,EAAsBC,EAAW,EAAW,EAAc,EAAQ,CACtNC,EAAuB,CAAIC,EAAsBC,EAAqBC,IAA6DC,EAAsBL,EAAW,EAAK,EAAK,EAAG,CACjL,EAA0B,CAACM,EAAiCC,IAAmBC,EAAmBR,EAAW,EAAmB,EAAQ,EAAO,CAC/I,EAAyB,CAAIS,EAA0BC,IACvD,EACK,EAAG,EAAY,CAEjBf,EAAqB,EAAI,EAAE,CAGpC,MAAO,CACL,qBAAA,EACA,qBAAA,EACA,0BACA,2BAAA,EACA,wBACD,CACF"}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { Sequelize, Transaction, TransactionOptions, Transactionable } from "sequelize";
|
|
2
|
+
import { LoggerInstanceManager } from "@autofleet/logger";
|
|
3
|
+
import Events from "@autofleet/events";
|
|
2
4
|
import { IncomingMessage, ServerResponse } from "node:http";
|
|
3
5
|
|
|
4
6
|
//#region src/model-event-hooks.d.ts
|
|
@@ -7,7 +9,6 @@ interface ModelMapping {
|
|
|
7
9
|
tableName: string;
|
|
8
10
|
};
|
|
9
11
|
}
|
|
10
|
-
declare const addModelEventHooks: (sequelize: Sequelize, modelTableMapping: ModelMapping) => void;
|
|
11
12
|
//#endregion
|
|
12
13
|
//#region src/transaction-with-retry.d.ts
|
|
13
14
|
declare const transactionWithRetry: <T>(sequelize: Sequelize, funcToRun: (transaction: Transaction) => Promise<T>, retriesCount?: number, options?: TransactionOptions) => Promise<T>;
|
|
@@ -16,14 +17,14 @@ declare const transactionWithRetry: <T>(sequelize: Sequelize, funcToRun: (transa
|
|
|
16
17
|
declare const httpBasedTransaction: <T>(sequelize: Sequelize, req: IncomingMessage, res: ServerResponse, cb: (transaction: Transaction) => Promise<T>) => Promise<T>;
|
|
17
18
|
//#endregion
|
|
18
19
|
//#region src/runAfterTransactionCommits.d.ts
|
|
19
|
-
declare const runAfterTransactionCommits: (cb: () =>
|
|
20
|
+
declare const runAfterTransactionCommits: (cb: () => void | Promise<void>, options: Transactionable) => Promise<void>;
|
|
20
21
|
//#endregion
|
|
21
22
|
//#region src/index.d.ts
|
|
22
23
|
type ArgsWithoutSequelize<T> = T extends ((arg1: Sequelize, ...args: infer U) => unknown) ? U : never;
|
|
23
|
-
declare const _default: (sequelize: Sequelize) => {
|
|
24
|
+
declare const _default: (sequelize: Sequelize, logger?: LoggerInstanceManager) => {
|
|
24
25
|
transactionWithRetry: <T>(...args: ArgsWithoutSequelize<typeof transactionWithRetry<T>>) => Promise<T>;
|
|
25
26
|
httpBasedTransaction: <T>(...args: ArgsWithoutSequelize<typeof httpBasedTransaction<T>>) => Promise<T>;
|
|
26
|
-
registerModelEventHooks: (
|
|
27
|
+
registerModelEventHooks: (modelTableMapping: ModelMapping, events: Events) => void;
|
|
27
28
|
runAfterTransactionCommits: typeof runAfterTransactionCommits;
|
|
28
29
|
useOrCreateTransaction: <T>(transaction: Transaction, cb: (t: Transaction) => Promise<T>) => Promise<T>;
|
|
29
30
|
};
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { LoggerInstanceManager } from "@autofleet/logger";
|
|
1
2
|
import { Sequelize, Transaction, TransactionOptions, Transactionable } from "sequelize";
|
|
3
|
+
import Events from "@autofleet/events";
|
|
2
4
|
import { IncomingMessage, ServerResponse } from "node:http";
|
|
3
5
|
|
|
4
6
|
//#region src/model-event-hooks.d.ts
|
|
@@ -7,7 +9,6 @@ interface ModelMapping {
|
|
|
7
9
|
tableName: string;
|
|
8
10
|
};
|
|
9
11
|
}
|
|
10
|
-
declare const addModelEventHooks: (sequelize: Sequelize, modelTableMapping: ModelMapping) => void;
|
|
11
12
|
//#endregion
|
|
12
13
|
//#region src/transaction-with-retry.d.ts
|
|
13
14
|
declare const transactionWithRetry: <T>(sequelize: Sequelize, funcToRun: (transaction: Transaction) => Promise<T>, retriesCount?: number, options?: TransactionOptions) => Promise<T>;
|
|
@@ -16,14 +17,14 @@ declare const transactionWithRetry: <T>(sequelize: Sequelize, funcToRun: (transa
|
|
|
16
17
|
declare const httpBasedTransaction: <T>(sequelize: Sequelize, req: IncomingMessage, res: ServerResponse, cb: (transaction: Transaction) => Promise<T>) => Promise<T>;
|
|
17
18
|
//#endregion
|
|
18
19
|
//#region src/runAfterTransactionCommits.d.ts
|
|
19
|
-
declare const runAfterTransactionCommits: (cb: () =>
|
|
20
|
+
declare const runAfterTransactionCommits: (cb: () => void | Promise<void>, options: Transactionable) => Promise<void>;
|
|
20
21
|
//#endregion
|
|
21
22
|
//#region src/index.d.ts
|
|
22
23
|
type ArgsWithoutSequelize<T> = T extends ((arg1: Sequelize, ...args: infer U) => unknown) ? U : never;
|
|
23
|
-
declare const _default: (sequelize: Sequelize) => {
|
|
24
|
+
declare const _default: (sequelize: Sequelize, logger?: LoggerInstanceManager) => {
|
|
24
25
|
transactionWithRetry: <T>(...args: ArgsWithoutSequelize<typeof transactionWithRetry<T>>) => Promise<T>;
|
|
25
26
|
httpBasedTransaction: <T>(...args: ArgsWithoutSequelize<typeof httpBasedTransaction<T>>) => Promise<T>;
|
|
26
|
-
registerModelEventHooks: (
|
|
27
|
+
registerModelEventHooks: (modelTableMapping: ModelMapping, events: Events) => void;
|
|
27
28
|
runAfterTransactionCommits: typeof runAfterTransactionCommits;
|
|
28
29
|
useOrCreateTransaction: <T>(transaction: Transaction, cb: (t: Transaction) => Promise<T>) => Promise<T>;
|
|
29
30
|
};
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import e from"@autofleet/
|
|
1
|
+
import e from"@autofleet/logger";import{DatabaseError as t}from"sequelize";import n from"debug";const r=e();var i=r;const a=async(e,t)=>{t.transaction?t.transaction.afterCommit(()=>e()):await e()};var o=a;const s=e=>e instanceof Date||Object.prototype.toString.call(e)===`[object Date]`,c=e=>{let t={...e};return Object.entries(t).filter(([,e])=>s(e)).forEach(([e,n])=>{t[e]=n.getTime()/1e3}),t},l=(e,t,n,r)=>{if(!n){r.warn(`Events object must be provided to addModelEventHooks`);return}let a=(e,a=!1)=>{let o=r||i;try{let r=e.get();a&&Object.assign(r,{deletedAt:new Date});let i=t[e.constructor.name]?.tableName,s=`1`,l=c(r);if(!i)return;n.sendObject(i,s,l,Object.keys(e.rawAttributes)).catch(e=>{o.error(`sendObject error`,{tableName:i,eventVersion:s,e})})}catch(e){o.error(`dimTables error`,{e})}};e.addHook(`afterSave`,(e,t)=>o(()=>a(e),t)),e.addHook(`afterDestroy`,(e,t)=>o(()=>a(e,!0),t))};var u=l;const d=n(`sequelize-utils`),f=async(e,n,r=2,i={})=>{if(typeof n!=`function`)throw Error(`funcToRun must be a function`);if(typeof r!=`number`)throw Error(`if defined, retriesCount must be a number`);if(r<0)throw Error(`retriesCount must be a positive number`);try{let t=await e.transaction(i,async e=>{let t=await n(e);return t});return t}catch(a){if((a instanceof t||a?.constructor?.name===`DatabaseError`)&&--r>=0)return d(`error inside transactionWithRetry - will retry times ${r}`,a),f(e,n,r,i);throw r===-1&&d(`error inside transactionWithRetry - will stop retry`,a),a}},p=`rollback has been called on this transaction`,m=`Transaction cancelled due to request cancellation`,h=(e,t,n,r)=>{let i=!1;if(t.socket.destroyed)throw d(m),Error(m);return e.transaction(async e=>{let a=async()=>{d(m),!i&&(i=!0,await e.rollback())},o=async()=>{let t=!n.writableFinished;if(t){if(d(m),i)return;i=!0,await e.rollback()}};t.socket.once(`close`,a),n.once(`close`,o);let s=()=>{t.socket.removeListener(`close`,a),n.removeListener(`close`,o)};try{let t=await r(e);return s(),t}catch(e){throw s(),e.message.includes(p)?Error(m):e}})};var g=(e,t)=>{let n=(t,n,r)=>f(e,t,n,r),r=(t,n,r)=>h(e,t,n,r),i=(n,r)=>u(e,n,r,t),a=(e,t)=>e?t(e):n(t,0);return{httpBasedTransaction:r,transactionWithRetry:n,registerModelEventHooks:i,runAfterTransactionCommits:o,useOrCreateTransaction:a}};export{g as default};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["cb: () => unknown","options: Transactionable","input: unknown","obj: object","sequelize: Sequelize","modelTableMapping: ModelMapping","object: Model","events","logger","runAfterTransactionCommits","sequelize: Sequelize","funcToRun: (transaction: Transaction) => Promise<T>","options: TransactionOptions","sequelize: Sequelize","req: IncomingMessage","res: ServerResponse","cb: (transaction: Transaction) => Promise<T>","transaction: Transaction","sequelize: Sequelize","transactionWithRetry","funcToRun: (transaction: Transaction) => Promise<T>","retriesCount?: number","options?: TransactionOptions","_transactionWithRetry","httpBasedTransaction","req: IncomingMessage","res: ServerResponse","cb: (transaction: Transaction) => Promise<T>","_httpBasedTransaction","modelTableMapping: ModelMapping","addModelEventHooks","transaction: Transaction","cb: (t: Transaction) => Promise<T>"],"sources":["../src/logger.ts","../src/events/index.ts","../src/runAfterTransactionCommits.ts","../src/model-event-hooks.ts","../src/common.ts","../src/transaction-with-retry.ts","../src/http-based-transaction.ts","../src/index.ts"],"sourcesContent":["import Logger from '@autofleet/logger';\n\nexport default Logger();\n","import Events from '@autofleet/events';\nimport logger from '../logger';\n\nexport default new Events({ logger });\n","import { Transactionable } from 'sequelize';\n\nconst runAfterTransactionCommits = async (cb: () => unknown, options: Transactionable): Promise<void> => {\n if (options.transaction) {\n options.transaction.afterCommit(() => cb());\n } else {\n await cb();\n }\n};\nexport default runAfterTransactionCommits;\n","import type { Model, Sequelize } from 'sequelize';\nimport events from './events';\nimport logger from './logger';\nimport runAfterTransactionCommits from './runAfterTransactionCommits';\n\nexport interface ModelMapping {\n [ModelName: string]: {\n tableName: string\n };\n}\nconst isDate = (input: unknown): input is Date => input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';\n// eslint-disable-next-line @typescript-eslint/ban-types\nconst formatDatesInObject = (obj: object) => {\n const newObj = { ...obj };\n Object.entries(newObj).filter(([, value]) => isDate(value)).forEach(([key, value]) => {\n newObj[key] = (value as Date).getTime() / 1000;\n });\n return newObj;\n};\n\nconst addModelEventHooks = (sequelize: Sequelize, modelTableMapping: ModelMapping): void => {\n const updateEventToDimTable = (object: Model, isDelete = false) => {\n try {\n const objectToSend = object.get();\n if (isDelete) {\n Object.assign(objectToSend, { deletedAt: new Date() });\n }\n const tableName = modelTableMapping[object.constructor.name]?.tableName;\n const eventVersion = '1';\n const objectToSendFormatted = formatDatesInObject(objectToSend);\n if (!tableName) {\n return;\n }\n events.sendObject(\n tableName,\n eventVersion,\n objectToSendFormatted,\n // @ts-expect-error the rawAttributes is typed as static, while it actually is on the instance level.\n Object.keys(object.rawAttributes),\n ).catch((e) => {\n logger.error('sendObject error', { tableName, eventVersion, e });\n });\n } catch (e) {\n logger.error('dimTables error', { e });\n }\n };\n\n sequelize.addHook('afterSave', (savedObject, options) => runAfterTransactionCommits(() => updateEventToDimTable(savedObject), options));\n sequelize.addHook('afterDestroy', (savedObject, options) => runAfterTransactionCommits(() => updateEventToDimTable(savedObject, true), options));\n};\n\nexport default addModelEventHooks;\n","import debug from 'debug';\n\nexport const debugLog = debug('sequelize-utils');\n","import {\n DatabaseError, type Sequelize, type Transaction, type TransactionOptions,\n} from 'sequelize';\nimport { debugLog } from './common';\n\nexport const transactionWithRetry = async <T>(sequelize: Sequelize, funcToRun: (transaction: Transaction) => Promise<T>, retriesCount = 2, options: TransactionOptions = {}): Promise<T> => {\n if (typeof funcToRun !== 'function') {\n throw new Error('funcToRun must be a function');\n }\n if (typeof retriesCount !== 'number') {\n throw new Error('if defined, retriesCount must be a number');\n }\n if (retriesCount < 0) {\n throw new Error('retriesCount must be a positive number');\n }\n try {\n const transValue = await sequelize.transaction(options, async (transaction) => {\n const funcValue = await funcToRun(transaction);\n return funcValue;\n });\n return transValue;\n } catch (e) {\n if ((e instanceof DatabaseError || e?.constructor?.name === 'DatabaseError') && --retriesCount >= 0) {\n debugLog(`error inside transactionWithRetry - will retry times ${retriesCount}`, e);\n return transactionWithRetry(sequelize, funcToRun, retriesCount, options);\n }\n if (retriesCount === -1) {\n debugLog('error inside transactionWithRetry - will stop retry', e);\n }\n throw e;\n }\n};\n","import type { IncomingMessage, ServerResponse } from 'node:http';\nimport type { Sequelize, Transaction } from 'sequelize';\nimport { debugLog } from './common';\n\nconst rollbackErrorText = 'rollback has been called on this transaction';\nconst abortErrorText = 'Transaction cancelled due to request cancellation';\n\nexport const httpBasedTransaction = <T>(sequelize: Sequelize, req: IncomingMessage, res: ServerResponse, cb: (transaction: Transaction) => Promise<T>): Promise<T> => {\n let aborted = false;\n if (req.socket.destroyed) {\n debugLog(abortErrorText);\n throw new Error(abortErrorText);\n }\n return sequelize.transaction(async (transaction: Transaction) => {\n // https://github.com/nodejs/node/blob/e46c680bf2b211bbd52cf959ca17ee98c7f657f5/test/parallel/test-http-aborted.js#L9\n\n // 2023-04-13: Node.js 16.0.0\n // Added also the `res.writableFinished` check, because it seems that the socket is not destroyed when the request is aborted, but the response is not finished.\n // https://github.com/Jimbly/http-proxy-node16/commit/ba0c414cd03799e357c5d867c11dea06a9c34ec8#diff-b2d1e3b7c5f3b424a0af7971c582c822fd25a5ea279040ef6dc93fc4b2cf619dR151\n\n const rollback = async () => {\n debugLog(abortErrorText);\n if (aborted) return;\n aborted = true;\n await transaction.rollback();\n };\n const resRollback = async () => {\n const didNotFinishWrite = !res.writableFinished;\n if (didNotFinishWrite) {\n debugLog(abortErrorText);\n if (aborted) return;\n aborted = true;\n await transaction.rollback();\n }\n };\n req.socket.once('close', rollback);\n res.once('close', resRollback);\n\n const removeListeners = () => {\n req.socket.removeListener('close', rollback);\n res.removeListener('close', resRollback);\n };\n\n try {\n const response = await cb(transaction);\n removeListeners();\n return response;\n } catch (e) {\n removeListeners();\n if (e.message.includes(rollbackErrorText)) {\n throw new Error(abortErrorText);\n }\n throw e;\n }\n });\n};\n","/* eslint-disable import/prefer-default-export */\nimport type {\n Sequelize,\n Transaction,\n TransactionOptions,\n} from 'sequelize';\nimport type { IncomingMessage, ServerResponse } from 'node:http';\nimport addModelEventHooks, { ModelMapping } from './model-event-hooks';\nimport { transactionWithRetry as _transactionWithRetry } from './transaction-with-retry';\nimport { httpBasedTransaction as _httpBasedTransaction } from './http-based-transaction';\nimport runAfterTransactionCommits from './runAfterTransactionCommits';\n\ntype ArgsWithoutSequelize<T> = T extends (arg1: Sequelize, ...args: infer U) => unknown ? U : never;\n\nexport default (sequelize: Sequelize): {\n transactionWithRetry: <T>(...args: ArgsWithoutSequelize<typeof _transactionWithRetry<T>>) => Promise<T>;\n httpBasedTransaction: <T>(...args: ArgsWithoutSequelize<typeof _httpBasedTransaction<T>>) => Promise<T>;\n registerModelEventHooks: (...args: ArgsWithoutSequelize<typeof addModelEventHooks>) => void;\n runAfterTransactionCommits: typeof runAfterTransactionCommits;\n useOrCreateTransaction: <T>(transaction: Transaction, cb: (t: Transaction) => Promise<T>) => Promise<T>;\n} => {\n const transactionWithRetry = <T>(funcToRun: (transaction: Transaction) => Promise<T>, retriesCount?: number, options?: TransactionOptions): Promise<T> => _transactionWithRetry(sequelize, funcToRun, retriesCount, options);\n const httpBasedTransaction = <T>(req: IncomingMessage, res: ServerResponse, cb: (transaction: Transaction) => Promise<T>): Promise<T> => _httpBasedTransaction(sequelize, req, res, cb);\n const registerModelEventHooks = (modelTableMapping: ModelMapping) => addModelEventHooks(sequelize, modelTableMapping);\n const useOrCreateTransaction = <T>(transaction: Transaction, cb: (t: Transaction) => Promise<T>) => {\n if (transaction) {\n return cb(transaction);\n }\n return transactionWithRetry(cb, 0);\n };\n\n return {\n httpBasedTransaction,\n transactionWithRetry,\n registerModelEventHooks,\n runAfterTransactionCommits,\n useOrCreateTransaction,\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["defaultExport: LoggerInstanceManager","cb: () => void | Promise<void>","options: Transactionable","input: unknown","obj: object","sequelize: Sequelize","modelTableMapping: ModelMapping","events: Events","logger?: LoggerInstanceManager","object: Model","packageLogger","runAfterTransactionCommits","debugLog: debug.Debugger","sequelize: Sequelize","funcToRun: (transaction: Transaction) => Promise<T>","options: TransactionOptions","sequelize: Sequelize","req: IncomingMessage","res: ServerResponse","cb: (transaction: Transaction) => Promise<T>","transaction: Transaction","sequelize: Sequelize","logger?: LoggerInstanceManager","transactionWithRetry","funcToRun: (transaction: Transaction) => Promise<T>","retriesCount?: number","options?: TransactionOptions","_transactionWithRetry","httpBasedTransaction","req: IncomingMessage","res: ServerResponse","cb: (transaction: Transaction) => Promise<T>","_httpBasedTransaction","modelTableMapping: ModelMapping","events: Events","addModelEventHooks","transaction: Transaction","cb: (t: Transaction) => Promise<T>"],"sources":["../src/logger.ts","../src/runAfterTransactionCommits.ts","../src/model-event-hooks.ts","../src/common.ts","../src/transaction-with-retry.ts","../src/http-based-transaction.ts","../src/index.ts"],"sourcesContent":["import Logger, { LoggerInstanceManager } from '@autofleet/logger';\n\nconst defaultExport: LoggerInstanceManager = Logger();\nexport default defaultExport;\n","import { Transactionable } from 'sequelize';\n\nconst runAfterTransactionCommits = async (cb: () => void | Promise<void>, options: Transactionable): Promise<void> => {\n if (options.transaction) {\n options.transaction.afterCommit(() => cb());\n } else {\n await cb();\n }\n};\nexport default runAfterTransactionCommits;\n","import type { Model, Sequelize } from 'sequelize';\nimport type Events from '@autofleet/events';\nimport type { LoggerInstanceManager } from '@autofleet/logger';\nimport packageLogger from './logger';\nimport runAfterTransactionCommits from './runAfterTransactionCommits';\n\nexport interface ModelMapping {\n [ModelName: string]: {\n tableName: string\n };\n}\nconst isDate = (input: unknown): input is Date => input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';\n// eslint-disable-next-line @typescript-eslint/ban-types\nconst formatDatesInObject = (obj: object) => {\n const newObj = { ...obj };\n Object.entries(newObj).filter(([, value]) => isDate(value)).forEach(([key, value]) => {\n newObj[key] = (value as Date).getTime() / 1000;\n });\n return newObj;\n};\n\nconst addModelEventHooks = (sequelize: Sequelize, modelTableMapping: ModelMapping, events: Events, logger?: LoggerInstanceManager): void => {\n if (!events) {\n logger.warn('Events object must be provided to addModelEventHooks');\n return;\n }\n const updateEventToDimTable = (object: Model, isDelete = false) => {\n const localLogger = logger || packageLogger;\n try {\n const objectToSend = object.get();\n if (isDelete) {\n Object.assign(objectToSend, { deletedAt: new Date() });\n }\n const tableName = modelTableMapping[object.constructor.name]?.tableName;\n const eventVersion = '1';\n const objectToSendFormatted = formatDatesInObject(objectToSend);\n if (!tableName) {\n return;\n }\n events.sendObject(\n tableName,\n eventVersion,\n objectToSendFormatted,\n // @ts-expect-error the rawAttributes is typed as static, while it actually is on the instance level.\n Object.keys(object.rawAttributes),\n ).catch((e) => {\n localLogger.error('sendObject error', { tableName, eventVersion, e });\n });\n } catch (e) {\n localLogger.error('dimTables error', { e });\n }\n };\n\n sequelize.addHook('afterSave', (savedObject, options) => runAfterTransactionCommits(() => updateEventToDimTable(savedObject), options));\n sequelize.addHook('afterDestroy', (savedObject, options) => runAfterTransactionCommits(() => updateEventToDimTable(savedObject, true), options));\n};\n\nexport default addModelEventHooks;\n","import debug from 'debug';\n\nexport const debugLog: debug.Debugger = debug('sequelize-utils');\n","import {\n DatabaseError, type Sequelize, type Transaction, type TransactionOptions,\n} from 'sequelize';\nimport { debugLog } from './common';\n\nexport const transactionWithRetry = async <T>(sequelize: Sequelize, funcToRun: (transaction: Transaction) => Promise<T>, retriesCount = 2, options: TransactionOptions = {}): Promise<T> => {\n if (typeof funcToRun !== 'function') {\n throw new Error('funcToRun must be a function');\n }\n if (typeof retriesCount !== 'number') {\n throw new Error('if defined, retriesCount must be a number');\n }\n if (retriesCount < 0) {\n throw new Error('retriesCount must be a positive number');\n }\n try {\n const transValue = await sequelize.transaction(options, async (transaction) => {\n const funcValue = await funcToRun(transaction);\n return funcValue;\n });\n return transValue;\n } catch (e) {\n if ((e instanceof DatabaseError || e?.constructor?.name === 'DatabaseError') && --retriesCount >= 0) {\n debugLog(`error inside transactionWithRetry - will retry times ${retriesCount}`, e);\n return transactionWithRetry(sequelize, funcToRun, retriesCount, options);\n }\n if (retriesCount === -1) {\n debugLog('error inside transactionWithRetry - will stop retry', e);\n }\n throw e;\n }\n};\n","import type { IncomingMessage, ServerResponse } from 'node:http';\nimport type { Sequelize, Transaction } from 'sequelize';\nimport { debugLog } from './common';\n\nconst rollbackErrorText = 'rollback has been called on this transaction';\nconst abortErrorText = 'Transaction cancelled due to request cancellation';\n\nexport const httpBasedTransaction = <T>(sequelize: Sequelize, req: IncomingMessage, res: ServerResponse, cb: (transaction: Transaction) => Promise<T>): Promise<T> => {\n let aborted = false;\n if (req.socket.destroyed) {\n debugLog(abortErrorText);\n throw new Error(abortErrorText);\n }\n return sequelize.transaction(async (transaction: Transaction) => {\n // https://github.com/nodejs/node/blob/e46c680bf2b211bbd52cf959ca17ee98c7f657f5/test/parallel/test-http-aborted.js#L9\n\n // 2023-04-13: Node.js 16.0.0\n // Added also the `res.writableFinished` check, because it seems that the socket is not destroyed when the request is aborted, but the response is not finished.\n // https://github.com/Jimbly/http-proxy-node16/commit/ba0c414cd03799e357c5d867c11dea06a9c34ec8#diff-b2d1e3b7c5f3b424a0af7971c582c822fd25a5ea279040ef6dc93fc4b2cf619dR151\n\n const rollback = async () => {\n debugLog(abortErrorText);\n if (aborted) return;\n aborted = true;\n await transaction.rollback();\n };\n const resRollback = async () => {\n const didNotFinishWrite = !res.writableFinished;\n if (didNotFinishWrite) {\n debugLog(abortErrorText);\n if (aborted) return;\n aborted = true;\n await transaction.rollback();\n }\n };\n req.socket.once('close', rollback);\n res.once('close', resRollback);\n\n const removeListeners = () => {\n req.socket.removeListener('close', rollback);\n res.removeListener('close', resRollback);\n };\n\n try {\n const response = await cb(transaction);\n removeListeners();\n return response;\n } catch (e) {\n removeListeners();\n if (e.message.includes(rollbackErrorText)) {\n throw new Error(abortErrorText);\n }\n throw e;\n }\n });\n};\n","/* eslint-disable import/prefer-default-export */\nimport type {\n Sequelize,\n Transaction,\n TransactionOptions,\n} from 'sequelize';\nimport type { IncomingMessage, ServerResponse } from 'node:http';\nimport type { LoggerInstanceManager } from '@autofleet/logger';\nimport type Events from '@autofleet/events';\nimport addModelEventHooks, { ModelMapping } from './model-event-hooks';\nimport { transactionWithRetry as _transactionWithRetry } from './transaction-with-retry';\nimport { httpBasedTransaction as _httpBasedTransaction } from './http-based-transaction';\nimport runAfterTransactionCommits from './runAfterTransactionCommits';\n\ntype ArgsWithoutSequelize<T> = T extends (arg1: Sequelize, ...args: infer U) => unknown ? U : never;\n\nexport default (sequelize: Sequelize, logger?: LoggerInstanceManager): {\n transactionWithRetry: <T>(...args: ArgsWithoutSequelize<typeof _transactionWithRetry<T>>) => Promise<T>;\n httpBasedTransaction: <T>(...args: ArgsWithoutSequelize<typeof _httpBasedTransaction<T>>) => Promise<T>;\n registerModelEventHooks: (modelTableMapping: ModelMapping, events: Events) => void;\n runAfterTransactionCommits: typeof runAfterTransactionCommits;\n useOrCreateTransaction: <T>(transaction: Transaction, cb: (t: Transaction) => Promise<T>) => Promise<T>;\n} => {\n const transactionWithRetry = <T>(funcToRun: (transaction: Transaction) => Promise<T>, retriesCount?: number, options?: TransactionOptions): Promise<T> => _transactionWithRetry(sequelize, funcToRun, retriesCount, options);\n const httpBasedTransaction = <T>(req: IncomingMessage, res: ServerResponse, cb: (transaction: Transaction) => Promise<T>): Promise<T> => _httpBasedTransaction(sequelize, req, res, cb);\n const registerModelEventHooks = (modelTableMapping: ModelMapping, events: Events) => addModelEventHooks(sequelize, modelTableMapping, events, logger);\n const useOrCreateTransaction = <T>(transaction: Transaction, cb: (t: Transaction) => Promise<T>) => {\n if (transaction) {\n return cb(transaction);\n }\n return transactionWithRetry(cb, 0);\n };\n\n return {\n httpBasedTransaction,\n transactionWithRetry,\n registerModelEventHooks,\n runAfterTransactionCommits,\n useOrCreateTransaction,\n };\n};\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@autofleet/sequelize-utils",
|
|
3
|
-
"version": "6.0
|
|
3
|
+
"version": "6.1.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -35,12 +35,12 @@
|
|
|
35
35
|
"node": ">=18.0.0"
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@autofleet/events": "^5.1.3",
|
|
39
38
|
"debug": "^4.3.2"
|
|
40
39
|
},
|
|
41
40
|
"peerDependencies": {
|
|
41
|
+
"@autofleet/events": ">=5",
|
|
42
42
|
"@autofleet/logger": ">=4",
|
|
43
|
-
"sequelize": ">=
|
|
43
|
+
"sequelize": ">=6"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@autofleet/logger": "^4.2.18",
|
|
@@ -57,10 +57,14 @@
|
|
|
57
57
|
"eslint-plugin-import": "^2.31.0",
|
|
58
58
|
"express": "^4.21.2",
|
|
59
59
|
"pg": "^8.13.1",
|
|
60
|
-
"sequelize": "^
|
|
60
|
+
"sequelize": "^6.37.7",
|
|
61
61
|
"ts-node": "^10.1.0",
|
|
62
62
|
"tsdown": "^0.13.0",
|
|
63
63
|
"typescript": "^5.5.4",
|
|
64
64
|
"vitest": "^3.2.4"
|
|
65
|
+
},
|
|
66
|
+
"optionalDependencies": {
|
|
67
|
+
"@rolldown/binding-linux-x64-gnu": "*",
|
|
68
|
+
"@rollup/rollup-linux-x64-gnu": "*"
|
|
65
69
|
}
|
|
66
70
|
}
|