( rawDb: T, customTransaction?: <R>(fn: (tx: any) => Promise<R> | R) => Promise<R>, )
| 1312 | } |
| 1313 | |
| 1314 | function wrapDbClient<T extends object>( |
| 1315 | rawDb: T, |
| 1316 | customTransaction?: <R>(fn: (tx: any) => Promise<R> | R) => Promise<R>, |
| 1317 | ) { |
| 1318 | return new Proxy(rawDb as Record<string, unknown>, { |
| 1319 | get(target, prop, receiver) { |
| 1320 | if (prop === 'transaction') { |
| 1321 | if (customTransaction) return customTransaction; |
| 1322 | |
| 1323 | const originalTransaction = target.transaction; |
| 1324 | if (typeof originalTransaction !== 'function') return undefined; |
| 1325 | return async <R>(fn: (tx: any) => Promise<R> | R) => { |
| 1326 | return await (originalTransaction as (handler: (tx: unknown) => Promise<R> | R) => Promise<R>).call(target, async (tx: unknown) => { |
| 1327 | return await fn(wrapDbClient(tx as object)); |
| 1328 | }); |
| 1329 | }; |
| 1330 | } |
| 1331 | |
| 1332 | const original = Reflect.get(target, prop, receiver); |
| 1333 | if (typeof original !== 'function') { |
| 1334 | return original; |
| 1335 | } |
| 1336 | |
| 1337 | return (...args: unknown[]) => { |
| 1338 | const result = original.apply(target, args); |
| 1339 | if (shouldWrapObject(result)) { |
| 1340 | return wrapQueryLike(result); |
| 1341 | } |
| 1342 | return result; |
| 1343 | }; |
| 1344 | }, |
| 1345 | }) as T; |
| 1346 | } |
| 1347 | |
| 1348 | function initSqliteDb() { |
| 1349 | const sqlitePath = resolveSqlitePath(); |
no outgoing calls
no test coverage detected