drizzle-orm 1.0.0-beta.1-199e5ec → 1.0.0-beta.1-388a474

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.
Files changed (674) hide show
  1. package/aws-data-api/pg/driver.cjs +6 -1
  2. package/aws-data-api/pg/driver.cjs.map +1 -1
  3. package/aws-data-api/pg/driver.d.cts +1 -0
  4. package/aws-data-api/pg/driver.d.ts +1 -0
  5. package/aws-data-api/pg/driver.js +6 -1
  6. package/aws-data-api/pg/driver.js.map +1 -1
  7. package/aws-data-api/pg/session.cjs +19 -6
  8. package/aws-data-api/pg/session.cjs.map +1 -1
  9. package/aws-data-api/pg/session.d.cts +13 -2
  10. package/aws-data-api/pg/session.d.ts +13 -2
  11. package/aws-data-api/pg/session.js +19 -6
  12. package/aws-data-api/pg/session.js.map +1 -1
  13. package/better-sqlite3/driver.cjs +1 -2
  14. package/better-sqlite3/driver.cjs.map +1 -1
  15. package/better-sqlite3/driver.js +1 -2
  16. package/better-sqlite3/driver.js.map +1 -1
  17. package/better-sqlite3/session.cjs +15 -9
  18. package/better-sqlite3/session.cjs.map +1 -1
  19. package/better-sqlite3/session.d.cts +12 -2
  20. package/better-sqlite3/session.d.ts +12 -2
  21. package/better-sqlite3/session.js +15 -9
  22. package/better-sqlite3/session.js.map +1 -1
  23. package/bun-sql/driver.cjs +6 -3
  24. package/bun-sql/driver.cjs.map +1 -1
  25. package/bun-sql/driver.js +6 -3
  26. package/bun-sql/driver.js.map +1 -1
  27. package/bun-sql/session.cjs +25 -11
  28. package/bun-sql/session.cjs.map +1 -1
  29. package/bun-sql/session.d.cts +12 -2
  30. package/bun-sql/session.d.ts +12 -2
  31. package/bun-sql/session.js +25 -11
  32. package/bun-sql/session.js.map +1 -1
  33. package/bun-sqlite/driver.cjs +1 -2
  34. package/bun-sqlite/driver.cjs.map +1 -1
  35. package/bun-sqlite/driver.js +1 -2
  36. package/bun-sqlite/driver.js.map +1 -1
  37. package/bun-sqlite/session.cjs +3 -6
  38. package/bun-sqlite/session.cjs.map +1 -1
  39. package/bun-sqlite/session.js +3 -6
  40. package/bun-sqlite/session.js.map +1 -1
  41. package/cache/core/cache.cjs +58 -0
  42. package/cache/core/cache.cjs.map +1 -0
  43. package/cache/core/cache.d.cts +36 -0
  44. package/cache/core/cache.d.ts +36 -0
  45. package/cache/core/cache.js +32 -0
  46. package/cache/core/cache.js.map +1 -0
  47. package/cache/core/index.cjs +23 -0
  48. package/cache/core/index.cjs.map +1 -0
  49. package/cache/core/index.d.cts +1 -0
  50. package/cache/core/index.d.ts +1 -0
  51. package/cache/core/index.js +2 -0
  52. package/cache/core/index.js.map +1 -0
  53. package/cache/core/types.cjs +17 -0
  54. package/cache/core/types.cjs.map +1 -0
  55. package/cache/core/types.d.cts +33 -0
  56. package/cache/core/types.d.ts +33 -0
  57. package/cache/core/types.js +1 -0
  58. package/cache/core/types.js.map +1 -0
  59. package/cache/upstash/cache.cjs +195 -0
  60. package/cache/upstash/cache.cjs.map +1 -0
  61. package/cache/upstash/cache.d.cts +59 -0
  62. package/cache/upstash/cache.d.ts +59 -0
  63. package/cache/upstash/cache.js +170 -0
  64. package/cache/upstash/cache.js.map +1 -0
  65. package/cache/upstash/index.cjs +23 -0
  66. package/cache/upstash/index.cjs.map +1 -0
  67. package/cache/upstash/index.d.cts +1 -0
  68. package/cache/upstash/index.d.ts +1 -0
  69. package/cache/upstash/index.js +2 -0
  70. package/cache/upstash/index.js.map +1 -0
  71. package/casing.cjs +2 -4
  72. package/casing.cjs.map +1 -1
  73. package/casing.js +2 -4
  74. package/casing.js.map +1 -1
  75. package/column-builder.cjs +1 -2
  76. package/column-builder.cjs.map +1 -1
  77. package/column-builder.js +1 -2
  78. package/column-builder.js.map +1 -1
  79. package/d1/driver.cjs +8 -1
  80. package/d1/driver.cjs.map +1 -1
  81. package/d1/driver.js +8 -1
  82. package/d1/driver.js.map +1 -1
  83. package/d1/session.cjs +28 -13
  84. package/d1/session.cjs.map +1 -1
  85. package/d1/session.d.cts +12 -2
  86. package/d1/session.d.ts +12 -2
  87. package/d1/session.js +28 -13
  88. package/d1/session.js.map +1 -1
  89. package/durable-sqlite/session.cjs +3 -5
  90. package/durable-sqlite/session.cjs.map +1 -1
  91. package/durable-sqlite/session.js +3 -5
  92. package/durable-sqlite/session.js.map +1 -1
  93. package/errors.cjs +14 -0
  94. package/errors.cjs.map +1 -1
  95. package/errors.d.cts +7 -0
  96. package/errors.d.ts +7 -0
  97. package/errors.js +13 -0
  98. package/errors.js.map +1 -1
  99. package/expo-sqlite/session.cjs +2 -4
  100. package/expo-sqlite/session.cjs.map +1 -1
  101. package/expo-sqlite/session.js +2 -4
  102. package/expo-sqlite/session.js.map +1 -1
  103. package/gel/driver.cjs +10 -4
  104. package/gel/driver.cjs.map +1 -1
  105. package/gel/driver.d.cts +3 -1
  106. package/gel/driver.d.ts +3 -1
  107. package/gel/driver.js +10 -4
  108. package/gel/driver.js.map +1 -1
  109. package/gel/session.cjs +29 -12
  110. package/gel/session.cjs.map +1 -1
  111. package/gel/session.d.cts +12 -2
  112. package/gel/session.d.ts +12 -2
  113. package/gel/session.js +29 -12
  114. package/gel/session.js.map +1 -1
  115. package/gel-core/columns/custom.cjs +1 -2
  116. package/gel-core/columns/custom.cjs.map +1 -1
  117. package/gel-core/columns/custom.js +1 -2
  118. package/gel-core/columns/custom.js.map +1 -1
  119. package/gel-core/columns/timestamptz.cjs +1 -2
  120. package/gel-core/columns/timestamptz.cjs.map +1 -1
  121. package/gel-core/columns/timestamptz.js +1 -2
  122. package/gel-core/columns/timestamptz.js.map +1 -1
  123. package/gel-core/db.cjs +3 -0
  124. package/gel-core/db.cjs.map +1 -1
  125. package/gel-core/db.d.cts +4 -0
  126. package/gel-core/db.d.ts +4 -0
  127. package/gel-core/db.js +3 -0
  128. package/gel-core/db.js.map +1 -1
  129. package/gel-core/dialect.cjs +9 -16
  130. package/gel-core/dialect.cjs.map +1 -1
  131. package/gel-core/dialect.js +9 -16
  132. package/gel-core/dialect.js.map +1 -1
  133. package/gel-core/query-builders/delete.cjs +5 -1
  134. package/gel-core/query-builders/delete.cjs.map +1 -1
  135. package/gel-core/query-builders/delete.js +5 -1
  136. package/gel-core/query-builders/delete.js.map +1 -1
  137. package/gel-core/query-builders/insert.cjs +5 -1
  138. package/gel-core/query-builders/insert.cjs.map +1 -1
  139. package/gel-core/query-builders/insert.js +5 -1
  140. package/gel-core/query-builders/insert.js.map +1 -1
  141. package/gel-core/query-builders/select.cjs +26 -4
  142. package/gel-core/query-builders/select.cjs.map +1 -1
  143. package/gel-core/query-builders/select.d.cts +18 -9
  144. package/gel-core/query-builders/select.d.ts +18 -9
  145. package/gel-core/query-builders/select.js +26 -4
  146. package/gel-core/query-builders/select.js.map +1 -1
  147. package/gel-core/query-builders/select.types.cjs.map +1 -1
  148. package/gel-core/query-builders/select.types.d.cts +2 -1
  149. package/gel-core/query-builders/select.types.d.ts +2 -1
  150. package/gel-core/query-builders/update.cjs +5 -1
  151. package/gel-core/query-builders/update.cjs.map +1 -1
  152. package/gel-core/query-builders/update.js +5 -1
  153. package/gel-core/query-builders/update.js.map +1 -1
  154. package/gel-core/session.cjs +77 -1
  155. package/gel-core/session.cjs.map +1 -1
  156. package/gel-core/session.d.cts +13 -2
  157. package/gel-core/session.d.ts +13 -2
  158. package/gel-core/session.js +79 -3
  159. package/gel-core/session.js.map +1 -1
  160. package/gel-core/utils.cjs +16 -0
  161. package/gel-core/utils.cjs.map +1 -1
  162. package/gel-core/utils.d.cts +8 -4
  163. package/gel-core/utils.d.ts +8 -4
  164. package/gel-core/utils.js +15 -0
  165. package/gel-core/utils.js.map +1 -1
  166. package/index.cjs +16 -16
  167. package/index.cjs.map +1 -1
  168. package/libsql/driver-core.cjs +5 -1
  169. package/libsql/driver-core.cjs.map +1 -1
  170. package/libsql/driver-core.js +5 -1
  171. package/libsql/driver-core.js.map +1 -1
  172. package/libsql/driver.cjs +1 -2
  173. package/libsql/driver.cjs.map +1 -1
  174. package/libsql/driver.js +1 -2
  175. package/libsql/driver.js.map +1 -1
  176. package/libsql/http/index.cjs +1 -2
  177. package/libsql/http/index.cjs.map +1 -1
  178. package/libsql/http/index.js +1 -2
  179. package/libsql/http/index.js.map +1 -1
  180. package/libsql/node/index.cjs +1 -2
  181. package/libsql/node/index.cjs.map +1 -1
  182. package/libsql/node/index.js +1 -2
  183. package/libsql/node/index.js.map +1 -1
  184. package/libsql/session.cjs +33 -19
  185. package/libsql/session.cjs.map +1 -1
  186. package/libsql/session.d.cts +12 -2
  187. package/libsql/session.d.ts +12 -2
  188. package/libsql/session.js +33 -19
  189. package/libsql/session.js.map +1 -1
  190. package/libsql/sqlite3/index.cjs +1 -2
  191. package/libsql/sqlite3/index.cjs.map +1 -1
  192. package/libsql/sqlite3/index.js +1 -2
  193. package/libsql/sqlite3/index.js.map +1 -1
  194. package/libsql/wasm/index.cjs +1 -2
  195. package/libsql/wasm/index.cjs.map +1 -1
  196. package/libsql/wasm/index.js +1 -2
  197. package/libsql/wasm/index.js.map +1 -1
  198. package/libsql/web/index.cjs +1 -2
  199. package/libsql/web/index.cjs.map +1 -1
  200. package/libsql/web/index.js +1 -2
  201. package/libsql/web/index.js.map +1 -1
  202. package/libsql/ws/index.cjs +1 -2
  203. package/libsql/ws/index.cjs.map +1 -1
  204. package/libsql/ws/index.js +1 -2
  205. package/libsql/ws/index.js.map +1 -1
  206. package/mysql-core/columns/binary.cjs +2 -4
  207. package/mysql-core/columns/binary.cjs.map +1 -1
  208. package/mysql-core/columns/binary.js +2 -4
  209. package/mysql-core/columns/binary.js.map +1 -1
  210. package/mysql-core/columns/custom.cjs +1 -2
  211. package/mysql-core/columns/custom.cjs.map +1 -1
  212. package/mysql-core/columns/custom.js +1 -2
  213. package/mysql-core/columns/custom.js.map +1 -1
  214. package/mysql-core/columns/decimal.cjs +2 -4
  215. package/mysql-core/columns/decimal.cjs.map +1 -1
  216. package/mysql-core/columns/decimal.js +2 -4
  217. package/mysql-core/columns/decimal.js.map +1 -1
  218. package/mysql-core/columns/varbinary.cjs +2 -4
  219. package/mysql-core/columns/varbinary.cjs.map +1 -1
  220. package/mysql-core/columns/varbinary.js +2 -4
  221. package/mysql-core/columns/varbinary.js.map +1 -1
  222. package/mysql-core/db.cjs +17 -0
  223. package/mysql-core/db.cjs.map +1 -1
  224. package/mysql-core/db.d.cts +4 -0
  225. package/mysql-core/db.d.ts +4 -0
  226. package/mysql-core/db.js +17 -0
  227. package/mysql-core/db.js.map +1 -1
  228. package/mysql-core/dialect.cjs +8 -16
  229. package/mysql-core/dialect.cjs.map +1 -1
  230. package/mysql-core/dialect.js +8 -16
  231. package/mysql-core/dialect.js.map +1 -1
  232. package/mysql-core/query-builders/delete.cjs +9 -1
  233. package/mysql-core/query-builders/delete.cjs.map +1 -1
  234. package/mysql-core/query-builders/delete.js +9 -1
  235. package/mysql-core/query-builders/delete.js.map +1 -1
  236. package/mysql-core/query-builders/insert.cjs +8 -1
  237. package/mysql-core/query-builders/insert.cjs.map +1 -1
  238. package/mysql-core/query-builders/insert.d.cts +2 -0
  239. package/mysql-core/query-builders/insert.d.ts +2 -0
  240. package/mysql-core/query-builders/insert.js +8 -1
  241. package/mysql-core/query-builders/insert.js.map +1 -1
  242. package/mysql-core/query-builders/select.cjs +24 -3
  243. package/mysql-core/query-builders/select.cjs.map +1 -1
  244. package/mysql-core/query-builders/select.d.cts +17 -8
  245. package/mysql-core/query-builders/select.d.ts +17 -8
  246. package/mysql-core/query-builders/select.js +25 -4
  247. package/mysql-core/query-builders/select.js.map +1 -1
  248. package/mysql-core/query-builders/select.types.cjs.map +1 -1
  249. package/mysql-core/query-builders/select.types.d.cts +2 -1
  250. package/mysql-core/query-builders/select.types.d.ts +2 -1
  251. package/mysql-core/query-builders/update.cjs +11 -1
  252. package/mysql-core/query-builders/update.cjs.map +1 -1
  253. package/mysql-core/query-builders/update.d.cts +2 -0
  254. package/mysql-core/query-builders/update.d.ts +2 -0
  255. package/mysql-core/query-builders/update.js +11 -1
  256. package/mysql-core/query-builders/update.js.map +1 -1
  257. package/mysql-core/session.cjs +78 -0
  258. package/mysql-core/session.cjs.map +1 -1
  259. package/mysql-core/session.d.cts +14 -1
  260. package/mysql-core/session.d.ts +14 -1
  261. package/mysql-core/session.js +80 -2
  262. package/mysql-core/session.js.map +1 -1
  263. package/mysql-core/utils.cjs +16 -0
  264. package/mysql-core/utils.cjs.map +1 -1
  265. package/mysql-core/utils.d.cts +6 -2
  266. package/mysql-core/utils.d.ts +6 -2
  267. package/mysql-core/utils.js +15 -0
  268. package/mysql-core/utils.js.map +1 -1
  269. package/mysql-proxy/session.cjs +19 -7
  270. package/mysql-proxy/session.cjs.map +1 -1
  271. package/mysql-proxy/session.d.cts +12 -2
  272. package/mysql-proxy/session.d.ts +12 -2
  273. package/mysql-proxy/session.js +19 -7
  274. package/mysql-proxy/session.js.map +1 -1
  275. package/mysql2/driver.cjs +11 -4
  276. package/mysql2/driver.cjs.map +1 -1
  277. package/mysql2/driver.d.cts +3 -1
  278. package/mysql2/driver.d.ts +3 -1
  279. package/mysql2/driver.js +11 -4
  280. package/mysql2/driver.js.map +1 -1
  281. package/mysql2/session.cjs +19 -7
  282. package/mysql2/session.cjs.map +1 -1
  283. package/mysql2/session.d.cts +12 -2
  284. package/mysql2/session.d.ts +12 -2
  285. package/mysql2/session.js +19 -7
  286. package/mysql2/session.js.map +1 -1
  287. package/neon/index.cjs +2 -2
  288. package/neon/index.cjs.map +1 -1
  289. package/neon/index.d.cts +1 -1
  290. package/neon/index.d.ts +1 -1
  291. package/neon/index.js +1 -1
  292. package/neon/index.js.map +1 -1
  293. package/neon/{neon-identity.cjs → neon-auth.cjs} +6 -5
  294. package/neon/neon-auth.cjs.map +1 -0
  295. package/neon/{neon-identity.d.cts → neon-auth.d.cts} +17 -0
  296. package/neon/{neon-identity.d.ts → neon-auth.d.ts} +17 -0
  297. package/neon/{neon-identity.js → neon-auth.js} +3 -2
  298. package/neon/neon-auth.js.map +1 -0
  299. package/neon-http/driver.cjs +11 -10
  300. package/neon-http/driver.cjs.map +1 -1
  301. package/neon-http/driver.d.cts +2 -0
  302. package/neon-http/driver.d.ts +2 -0
  303. package/neon-http/driver.js +11 -10
  304. package/neon-http/driver.js.map +1 -1
  305. package/neon-http/session.cjs +31 -19
  306. package/neon-http/session.cjs.map +1 -1
  307. package/neon-http/session.d.cts +12 -2
  308. package/neon-http/session.d.ts +12 -2
  309. package/neon-http/session.js +31 -19
  310. package/neon-http/session.js.map +1 -1
  311. package/neon-serverless/driver.cjs +10 -4
  312. package/neon-serverless/driver.cjs.map +1 -1
  313. package/neon-serverless/driver.d.cts +3 -1
  314. package/neon-serverless/driver.d.ts +3 -1
  315. package/neon-serverless/driver.js +10 -4
  316. package/neon-serverless/driver.js.map +1 -1
  317. package/neon-serverless/session.cjs +25 -9
  318. package/neon-serverless/session.cjs.map +1 -1
  319. package/neon-serverless/session.d.cts +12 -2
  320. package/neon-serverless/session.d.ts +12 -2
  321. package/neon-serverless/session.js +25 -9
  322. package/neon-serverless/session.js.map +1 -1
  323. package/node-postgres/driver.cjs +10 -4
  324. package/node-postgres/driver.cjs.map +1 -1
  325. package/node-postgres/driver.d.cts +7 -5
  326. package/node-postgres/driver.d.ts +7 -5
  327. package/node-postgres/driver.js +10 -4
  328. package/node-postgres/driver.js.map +1 -1
  329. package/node-postgres/session.cjs +23 -8
  330. package/node-postgres/session.cjs.map +1 -1
  331. package/node-postgres/session.d.cts +13 -2
  332. package/node-postgres/session.d.ts +13 -2
  333. package/node-postgres/session.js +23 -8
  334. package/node-postgres/session.js.map +1 -1
  335. package/op-sqlite/driver.cjs +5 -1
  336. package/op-sqlite/driver.cjs.map +1 -1
  337. package/op-sqlite/driver.js +5 -1
  338. package/op-sqlite/driver.js.map +1 -1
  339. package/op-sqlite/session.cjs +28 -13
  340. package/op-sqlite/session.cjs.map +1 -1
  341. package/op-sqlite/session.d.cts +12 -2
  342. package/op-sqlite/session.d.ts +12 -2
  343. package/op-sqlite/session.js +28 -13
  344. package/op-sqlite/session.js.map +1 -1
  345. package/package.json +78 -13
  346. package/pg-core/columns/bytea.cjs +1 -2
  347. package/pg-core/columns/bytea.cjs.map +1 -1
  348. package/pg-core/columns/bytea.js +1 -2
  349. package/pg-core/columns/bytea.js.map +1 -1
  350. package/pg-core/columns/common.cjs +1 -2
  351. package/pg-core/columns/common.cjs.map +1 -1
  352. package/pg-core/columns/common.js +1 -2
  353. package/pg-core/columns/common.js.map +1 -1
  354. package/pg-core/columns/custom.cjs +1 -2
  355. package/pg-core/columns/custom.cjs.map +1 -1
  356. package/pg-core/columns/custom.js +1 -2
  357. package/pg-core/columns/custom.js.map +1 -1
  358. package/pg-core/columns/numeric.cjs +2 -4
  359. package/pg-core/columns/numeric.cjs.map +1 -1
  360. package/pg-core/columns/numeric.js +2 -4
  361. package/pg-core/columns/numeric.js.map +1 -1
  362. package/pg-core/columns/postgis_extension/geometry.cjs +1 -2
  363. package/pg-core/columns/postgis_extension/geometry.cjs.map +1 -1
  364. package/pg-core/columns/postgis_extension/geometry.js +1 -2
  365. package/pg-core/columns/postgis_extension/geometry.js.map +1 -1
  366. package/pg-core/db.cjs +3 -0
  367. package/pg-core/db.cjs.map +1 -1
  368. package/pg-core/db.d.cts +4 -0
  369. package/pg-core/db.d.ts +4 -0
  370. package/pg-core/db.js +3 -0
  371. package/pg-core/db.js.map +1 -1
  372. package/pg-core/dialect.cjs +8 -16
  373. package/pg-core/dialect.cjs.map +1 -1
  374. package/pg-core/dialect.js +8 -16
  375. package/pg-core/dialect.js.map +1 -1
  376. package/pg-core/query-builders/delete.cjs +6 -1
  377. package/pg-core/query-builders/delete.cjs.map +1 -1
  378. package/pg-core/query-builders/delete.d.cts +3 -1
  379. package/pg-core/query-builders/delete.d.ts +3 -1
  380. package/pg-core/query-builders/delete.js +6 -1
  381. package/pg-core/query-builders/delete.js.map +1 -1
  382. package/pg-core/query-builders/insert.cjs +6 -1
  383. package/pg-core/query-builders/insert.cjs.map +1 -1
  384. package/pg-core/query-builders/insert.d.cts +2 -0
  385. package/pg-core/query-builders/insert.d.ts +2 -0
  386. package/pg-core/query-builders/insert.js +6 -1
  387. package/pg-core/query-builders/insert.js.map +1 -1
  388. package/pg-core/query-builders/select.cjs +28 -5
  389. package/pg-core/query-builders/select.cjs.map +1 -1
  390. package/pg-core/query-builders/select.d.cts +19 -10
  391. package/pg-core/query-builders/select.d.ts +19 -10
  392. package/pg-core/query-builders/select.js +28 -5
  393. package/pg-core/query-builders/select.js.map +1 -1
  394. package/pg-core/query-builders/select.types.cjs.map +1 -1
  395. package/pg-core/query-builders/select.types.d.cts +2 -1
  396. package/pg-core/query-builders/select.types.d.ts +2 -1
  397. package/pg-core/query-builders/update.cjs +6 -1
  398. package/pg-core/query-builders/update.cjs.map +1 -1
  399. package/pg-core/query-builders/update.d.cts +4 -2
  400. package/pg-core/query-builders/update.d.ts +4 -2
  401. package/pg-core/query-builders/update.js +6 -1
  402. package/pg-core/query-builders/update.js.map +1 -1
  403. package/pg-core/session.cjs +77 -1
  404. package/pg-core/session.cjs.map +1 -1
  405. package/pg-core/session.d.cts +13 -2
  406. package/pg-core/session.d.ts +13 -2
  407. package/pg-core/session.js +79 -3
  408. package/pg-core/session.js.map +1 -1
  409. package/pg-core/utils.cjs +16 -0
  410. package/pg-core/utils.cjs.map +1 -1
  411. package/pg-core/utils.d.cts +8 -4
  412. package/pg-core/utils.d.ts +8 -4
  413. package/pg-core/utils.js +16 -1
  414. package/pg-core/utils.js.map +1 -1
  415. package/pg-proxy/driver.cjs +7 -2
  416. package/pg-proxy/driver.cjs.map +1 -1
  417. package/pg-proxy/driver.js +7 -2
  418. package/pg-proxy/driver.js.map +1 -1
  419. package/pg-proxy/session.cjs +19 -7
  420. package/pg-proxy/session.cjs.map +1 -1
  421. package/pg-proxy/session.d.cts +12 -2
  422. package/pg-proxy/session.d.ts +12 -2
  423. package/pg-proxy/session.js +19 -7
  424. package/pg-proxy/session.js.map +1 -1
  425. package/pglite/driver.cjs +10 -4
  426. package/pglite/driver.cjs.map +1 -1
  427. package/pglite/driver.d.cts +2 -0
  428. package/pglite/driver.d.ts +2 -0
  429. package/pglite/driver.js +10 -4
  430. package/pglite/driver.js.map +1 -1
  431. package/pglite/session.cjs +23 -9
  432. package/pglite/session.cjs.map +1 -1
  433. package/pglite/session.d.cts +12 -2
  434. package/pglite/session.d.ts +12 -2
  435. package/pglite/session.js +23 -9
  436. package/pglite/session.js.map +1 -1
  437. package/planetscale-serverless/driver.cjs +9 -3
  438. package/planetscale-serverless/driver.cjs.map +1 -1
  439. package/planetscale-serverless/driver.d.cts +1 -0
  440. package/planetscale-serverless/driver.d.ts +1 -0
  441. package/planetscale-serverless/driver.js +9 -3
  442. package/planetscale-serverless/driver.js.map +1 -1
  443. package/planetscale-serverless/session.cjs +19 -7
  444. package/planetscale-serverless/session.cjs.map +1 -1
  445. package/planetscale-serverless/session.d.cts +12 -2
  446. package/planetscale-serverless/session.d.ts +12 -2
  447. package/planetscale-serverless/session.js +19 -7
  448. package/planetscale-serverless/session.js.map +1 -1
  449. package/postgres-js/driver.cjs +6 -3
  450. package/postgres-js/driver.cjs.map +1 -1
  451. package/postgres-js/driver.js +6 -3
  452. package/postgres-js/driver.js.map +1 -1
  453. package/postgres-js/session.cjs +22 -8
  454. package/postgres-js/session.cjs.map +1 -1
  455. package/postgres-js/session.d.cts +12 -2
  456. package/postgres-js/session.d.ts +12 -2
  457. package/postgres-js/session.js +22 -8
  458. package/postgres-js/session.js.map +1 -1
  459. package/prisma/mysql/session.cjs +1 -1
  460. package/prisma/mysql/session.cjs.map +1 -1
  461. package/prisma/mysql/session.js +1 -1
  462. package/prisma/mysql/session.js.map +1 -1
  463. package/prisma/pg/session.cjs +1 -1
  464. package/prisma/pg/session.cjs.map +1 -1
  465. package/prisma/pg/session.js +1 -1
  466. package/prisma/pg/session.js.map +1 -1
  467. package/query-builders/query-builder.cjs.map +1 -1
  468. package/query-builders/query-builder.d.cts +2 -1
  469. package/query-builders/query-builder.d.ts +2 -1
  470. package/query-builders/query-builder.js.map +1 -1
  471. package/relations.cjs +23 -46
  472. package/relations.cjs.map +1 -1
  473. package/relations.js +23 -46
  474. package/relations.js.map +1 -1
  475. package/singlestore/driver.cjs +24 -19
  476. package/singlestore/driver.cjs.map +1 -1
  477. package/singlestore/driver.d.cts +3 -1
  478. package/singlestore/driver.d.ts +3 -1
  479. package/singlestore/driver.js +24 -19
  480. package/singlestore/driver.js.map +1 -1
  481. package/singlestore/session.cjs +15 -5
  482. package/singlestore/session.cjs.map +1 -1
  483. package/singlestore/session.d.cts +12 -2
  484. package/singlestore/session.d.ts +12 -2
  485. package/singlestore/session.js +15 -5
  486. package/singlestore/session.js.map +1 -1
  487. package/singlestore-core/columns/binary.cjs +2 -4
  488. package/singlestore-core/columns/binary.cjs.map +1 -1
  489. package/singlestore-core/columns/binary.js +2 -4
  490. package/singlestore-core/columns/binary.js.map +1 -1
  491. package/singlestore-core/columns/custom.cjs +1 -2
  492. package/singlestore-core/columns/custom.cjs.map +1 -1
  493. package/singlestore-core/columns/custom.js +1 -2
  494. package/singlestore-core/columns/custom.js.map +1 -1
  495. package/singlestore-core/columns/decimal.cjs +2 -4
  496. package/singlestore-core/columns/decimal.cjs.map +1 -1
  497. package/singlestore-core/columns/decimal.js +2 -4
  498. package/singlestore-core/columns/decimal.js.map +1 -1
  499. package/singlestore-core/columns/enum.cjs +0 -1
  500. package/singlestore-core/columns/enum.cjs.map +1 -1
  501. package/singlestore-core/columns/enum.js +0 -1
  502. package/singlestore-core/columns/enum.js.map +1 -1
  503. package/singlestore-core/columns/varbinary.cjs +2 -4
  504. package/singlestore-core/columns/varbinary.cjs.map +1 -1
  505. package/singlestore-core/columns/varbinary.js +2 -4
  506. package/singlestore-core/columns/varbinary.js.map +1 -1
  507. package/singlestore-core/columns/vector.cjs.map +1 -1
  508. package/singlestore-core/columns/vector.js.map +1 -1
  509. package/singlestore-core/db.cjs +3 -0
  510. package/singlestore-core/db.cjs.map +1 -1
  511. package/singlestore-core/db.d.cts +4 -0
  512. package/singlestore-core/db.d.ts +4 -0
  513. package/singlestore-core/db.js +3 -0
  514. package/singlestore-core/db.js.map +1 -1
  515. package/singlestore-core/dialect.cjs +1 -2
  516. package/singlestore-core/dialect.cjs.map +1 -1
  517. package/singlestore-core/dialect.js +1 -2
  518. package/singlestore-core/dialect.js.map +1 -1
  519. package/singlestore-core/query-builders/delete.cjs +9 -1
  520. package/singlestore-core/query-builders/delete.cjs.map +1 -1
  521. package/singlestore-core/query-builders/delete.js +9 -1
  522. package/singlestore-core/query-builders/delete.js.map +1 -1
  523. package/singlestore-core/query-builders/insert.cjs +6 -1
  524. package/singlestore-core/query-builders/insert.cjs.map +1 -1
  525. package/singlestore-core/query-builders/insert.js +6 -1
  526. package/singlestore-core/query-builders/insert.js.map +1 -1
  527. package/singlestore-core/query-builders/select.cjs +25 -3
  528. package/singlestore-core/query-builders/select.cjs.map +1 -1
  529. package/singlestore-core/query-builders/select.d.cts +18 -9
  530. package/singlestore-core/query-builders/select.d.ts +18 -9
  531. package/singlestore-core/query-builders/select.js +25 -3
  532. package/singlestore-core/query-builders/select.js.map +1 -1
  533. package/singlestore-core/query-builders/select.types.cjs.map +1 -1
  534. package/singlestore-core/query-builders/select.types.d.cts +2 -1
  535. package/singlestore-core/query-builders/select.types.d.ts +2 -1
  536. package/singlestore-core/query-builders/update.cjs +9 -1
  537. package/singlestore-core/query-builders/update.cjs.map +1 -1
  538. package/singlestore-core/query-builders/update.js +9 -1
  539. package/singlestore-core/query-builders/update.js.map +1 -1
  540. package/singlestore-core/session.cjs +78 -0
  541. package/singlestore-core/session.cjs.map +1 -1
  542. package/singlestore-core/session.d.cts +13 -1
  543. package/singlestore-core/session.d.ts +13 -1
  544. package/singlestore-core/session.js +80 -2
  545. package/singlestore-core/session.js.map +1 -1
  546. package/singlestore-core/utils.cjs +16 -0
  547. package/singlestore-core/utils.cjs.map +1 -1
  548. package/singlestore-core/utils.d.cts +3 -0
  549. package/singlestore-core/utils.d.ts +3 -0
  550. package/singlestore-core/utils.js +15 -0
  551. package/singlestore-core/utils.js.map +1 -1
  552. package/sql/sql.cjs +10 -0
  553. package/sql/sql.cjs.map +1 -1
  554. package/sql/sql.js +10 -0
  555. package/sql/sql.js.map +1 -1
  556. package/sql-js/session.cjs +3 -6
  557. package/sql-js/session.cjs.map +1 -1
  558. package/sql-js/session.js +3 -6
  559. package/sql-js/session.js.map +1 -1
  560. package/sqlite-core/columns/custom.cjs +1 -2
  561. package/sqlite-core/columns/custom.cjs.map +1 -1
  562. package/sqlite-core/columns/custom.js +1 -2
  563. package/sqlite-core/columns/custom.js.map +1 -1
  564. package/sqlite-core/columns/numeric.cjs +2 -4
  565. package/sqlite-core/columns/numeric.cjs.map +1 -1
  566. package/sqlite-core/columns/numeric.js +2 -4
  567. package/sqlite-core/columns/numeric.js.map +1 -1
  568. package/sqlite-core/db.cjs +3 -0
  569. package/sqlite-core/db.cjs.map +1 -1
  570. package/sqlite-core/db.d.cts +4 -0
  571. package/sqlite-core/db.d.ts +4 -0
  572. package/sqlite-core/db.js +3 -0
  573. package/sqlite-core/db.js.map +1 -1
  574. package/sqlite-core/dialect.cjs +7 -14
  575. package/sqlite-core/dialect.cjs.map +1 -1
  576. package/sqlite-core/dialect.js +7 -14
  577. package/sqlite-core/dialect.js.map +1 -1
  578. package/sqlite-core/query-builders/delete.cjs +7 -1
  579. package/sqlite-core/query-builders/delete.cjs.map +1 -1
  580. package/sqlite-core/query-builders/delete.js +7 -1
  581. package/sqlite-core/query-builders/delete.js.map +1 -1
  582. package/sqlite-core/query-builders/insert.cjs +9 -5
  583. package/sqlite-core/query-builders/insert.cjs.map +1 -1
  584. package/sqlite-core/query-builders/insert.js +9 -5
  585. package/sqlite-core/query-builders/insert.js.map +1 -1
  586. package/sqlite-core/query-builders/select.cjs +28 -3
  587. package/sqlite-core/query-builders/select.cjs.map +1 -1
  588. package/sqlite-core/query-builders/select.d.cts +15 -6
  589. package/sqlite-core/query-builders/select.d.ts +15 -6
  590. package/sqlite-core/query-builders/select.js +28 -3
  591. package/sqlite-core/query-builders/select.js.map +1 -1
  592. package/sqlite-core/query-builders/select.types.cjs.map +1 -1
  593. package/sqlite-core/query-builders/select.types.d.cts +2 -1
  594. package/sqlite-core/query-builders/select.types.d.ts +2 -1
  595. package/sqlite-core/query-builders/update.cjs +7 -1
  596. package/sqlite-core/query-builders/update.cjs.map +1 -1
  597. package/sqlite-core/query-builders/update.js +7 -1
  598. package/sqlite-core/query-builders/update.js.map +1 -1
  599. package/sqlite-core/session.cjs +87 -3
  600. package/sqlite-core/session.cjs.map +1 -1
  601. package/sqlite-core/session.d.cts +17 -3
  602. package/sqlite-core/session.d.ts +17 -3
  603. package/sqlite-core/session.js +89 -5
  604. package/sqlite-core/session.js.map +1 -1
  605. package/sqlite-core/utils.cjs +16 -0
  606. package/sqlite-core/utils.cjs.map +1 -1
  607. package/sqlite-core/utils.d.cts +6 -2
  608. package/sqlite-core/utils.d.ts +6 -2
  609. package/sqlite-core/utils.js +15 -0
  610. package/sqlite-core/utils.js.map +1 -1
  611. package/sqlite-proxy/driver.cjs +9 -2
  612. package/sqlite-proxy/driver.cjs.map +1 -1
  613. package/sqlite-proxy/driver.js +9 -2
  614. package/sqlite-proxy/driver.js.map +1 -1
  615. package/sqlite-proxy/session.cjs +27 -12
  616. package/sqlite-proxy/session.cjs.map +1 -1
  617. package/sqlite-proxy/session.d.cts +12 -2
  618. package/sqlite-proxy/session.d.ts +12 -2
  619. package/sqlite-proxy/session.js +27 -12
  620. package/sqlite-proxy/session.js.map +1 -1
  621. package/subquery.cjs +4 -3
  622. package/subquery.cjs.map +1 -1
  623. package/subquery.d.cts +2 -1
  624. package/subquery.d.ts +2 -1
  625. package/subquery.js +4 -3
  626. package/subquery.js.map +1 -1
  627. package/tidb-serverless/driver.cjs +9 -3
  628. package/tidb-serverless/driver.cjs.map +1 -1
  629. package/tidb-serverless/driver.d.cts +1 -0
  630. package/tidb-serverless/driver.d.ts +1 -0
  631. package/tidb-serverless/driver.js +9 -3
  632. package/tidb-serverless/driver.js.map +1 -1
  633. package/tidb-serverless/session.cjs +19 -7
  634. package/tidb-serverless/session.cjs.map +1 -1
  635. package/tidb-serverless/session.d.cts +12 -2
  636. package/tidb-serverless/session.d.ts +12 -2
  637. package/tidb-serverless/session.js +19 -7
  638. package/tidb-serverless/session.js.map +1 -1
  639. package/utils.cjs +10 -20
  640. package/utils.cjs.map +1 -1
  641. package/utils.d.cts +2 -0
  642. package/utils.d.ts +2 -0
  643. package/utils.js +10 -20
  644. package/utils.js.map +1 -1
  645. package/vercel-postgres/driver.cjs +9 -2
  646. package/vercel-postgres/driver.cjs.map +1 -1
  647. package/vercel-postgres/driver.d.cts +3 -1
  648. package/vercel-postgres/driver.d.ts +3 -1
  649. package/vercel-postgres/driver.js +9 -2
  650. package/vercel-postgres/driver.js.map +1 -1
  651. package/vercel-postgres/session.cjs +25 -9
  652. package/vercel-postgres/session.cjs.map +1 -1
  653. package/vercel-postgres/session.d.cts +12 -2
  654. package/vercel-postgres/session.d.ts +12 -2
  655. package/vercel-postgres/session.js +25 -9
  656. package/vercel-postgres/session.js.map +1 -1
  657. package/version.cjs +1 -1
  658. package/version.d.cts +1 -1
  659. package/version.d.ts +1 -1
  660. package/version.js +1 -1
  661. package/xata-http/driver.cjs +7 -2
  662. package/xata-http/driver.cjs.map +1 -1
  663. package/xata-http/driver.d.cts +2 -0
  664. package/xata-http/driver.d.ts +2 -0
  665. package/xata-http/driver.js +7 -2
  666. package/xata-http/driver.js.map +1 -1
  667. package/xata-http/session.cjs +27 -13
  668. package/xata-http/session.cjs.map +1 -1
  669. package/xata-http/session.d.cts +12 -2
  670. package/xata-http/session.d.ts +12 -2
  671. package/xata-http/session.js +27 -13
  672. package/xata-http/session.js.map +1 -1
  673. package/neon/neon-identity.cjs.map +0 -1
  674. package/neon/neon-identity.js.map +0 -1
package/mysql2/session.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { once } from "node:events";
2
+ import { NoopCache } from "../cache/core/index.js";
2
3
  import { Column } from "../column.js";
3
4
  import { entityKind, is } from "../entity.js";
4
5
  import { NoopLogger } from "../logger.js";
@@ -10,8 +11,8 @@ import {
10
11
  import { fillPlaceholders, sql } from "../sql/sql.js";
11
12
  import { mapResultRow } from "../utils.js";
12
13
  class MySql2PreparedQuery extends MySqlPreparedQuery {
13
- constructor(client, queryString, params, logger, fields, customResultMapper, generatedIds, returningIds, isRqbV2Query) {
14
- super();
14
+ constructor(client, queryString, params, logger, cache, queryMetadata, cacheConfig, fields, customResultMapper, generatedIds, returningIds, isRqbV2Query) {
15
+ super(cache, queryMetadata, cacheConfig);
15
16
  this.client = client;
16
17
  this.params = params;
17
18
  this.logger = logger;
@@ -45,13 +46,14 @@ class MySql2PreparedQuery extends MySqlPreparedQuery {
45
46
  rawQuery;
46
47
  query;
47
48
  async execute(placeholderValues = {}) {
48
- if (this.isRqbV2Query)
49
- return this.executeRqbV2(placeholderValues);
49
+ if (this.isRqbV2Query) return this.executeRqbV2(placeholderValues);
50
50
  const params = fillPlaceholders(this.params, placeholderValues);
51
51
  this.logger.logQuery(this.rawQuery.sql, params);
52
52
  const { fields, client, rawQuery, query, joinsNotNullableMap, customResultMapper, returningIds, generatedIds } = this;
53
53
  if (!fields && !customResultMapper) {
54
- const res = await client.query(rawQuery, params);
54
+ const res = await this.queryWithCache(rawQuery.sql, params, async () => {
55
+ return await client.query(rawQuery, params);
56
+ });
55
57
  const insertId = res[0].insertId;
56
58
  const affectedRows = res[0].affectedRows;
57
59
  if (returningIds) {
@@ -75,7 +77,9 @@ class MySql2PreparedQuery extends MySqlPreparedQuery {
75
77
  }
76
78
  return res;
77
79
  }
78
- const result = await client.query(query, params);
80
+ const result = await this.queryWithCache(query.sql, params, async () => {
81
+ return await client.query(query, params);
82
+ });
79
83
  const rows = result[0];
80
84
  if (customResultMapper) {
81
85
  return customResultMapper(rows);
@@ -140,17 +144,22 @@ class MySql2Session extends MySqlSession {
140
144
  this.schema = schema;
141
145
  this.options = options;
142
146
  this.logger = options.logger ?? new NoopLogger();
147
+ this.cache = options.cache ?? new NoopCache();
143
148
  this.mode = options.mode;
144
149
  }
145
150
  static [entityKind] = "MySql2Session";
146
151
  logger;
147
152
  mode;
148
- prepareQuery(query, fields, customResultMapper, generatedIds, returningIds) {
153
+ cache;
154
+ prepareQuery(query, fields, customResultMapper, generatedIds, returningIds, queryMetadata, cacheConfig) {
149
155
  return new MySql2PreparedQuery(
150
156
  this.client,
151
157
  query.sql,
152
158
  query.params,
153
159
  this.logger,
160
+ this.cache,
161
+ queryMetadata,
162
+ cacheConfig,
154
163
  fields,
155
164
  customResultMapper,
156
165
  generatedIds,
@@ -163,6 +172,9 @@ class MySql2Session extends MySqlSession {
163
172
  query.sql,
164
173
  query.params,
165
174
  this.logger,
175
+ this.cache,
176
+ void 0,
177
+ void 0,
166
178
  fields,
167
179
  customResultMapper,
168
180
  generatedIds,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/mysql2/session.ts"],"sourcesContent":["import type { Connection as CallbackConnection } from 'mysql2';\nimport type {\n\tConnection,\n\tFieldPacket,\n\tOkPacket,\n\tPool,\n\tPoolConnection,\n\tQueryOptions,\n\tResultSetHeader,\n\tRowDataPacket,\n} from 'mysql2/promise';\nimport { once } from 'node:events';\nimport type * as V1 from '~/_relations.ts';\nimport { Column } from '~/column.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { MySqlDialect } from '~/mysql-core/dialect.ts';\nimport type { SelectedFieldsOrdered } from '~/mysql-core/query-builders/select.types.ts';\nimport {\n\ttype Mode,\n\tMySqlPreparedQuery,\n\ttype MySqlPreparedQueryConfig,\n\ttype MySqlPreparedQueryHKT,\n\ttype MySqlQueryResultHKT,\n\tMySqlSession,\n\tMySqlTransaction,\n\ttype MySqlTransactionConfig,\n\ttype PreparedQueryKind,\n} from '~/mysql-core/session.ts';\nimport type { AnyRelations, TablesRelationalConfig } from '~/relations.ts';\nimport { fillPlaceholders, sql } from '~/sql/sql.ts';\nimport type { Query, SQL } from '~/sql/sql.ts';\nimport { type Assume, mapResultRow } from '~/utils.ts';\n\nexport type MySql2Client = Pool | Connection;\n\nexport type MySqlRawQueryResult = [ResultSetHeader, FieldPacket[]];\nexport type MySqlQueryResultType = RowDataPacket[][] | RowDataPacket[] | OkPacket | OkPacket[] | ResultSetHeader;\nexport type MySqlQueryResult<\n\tT = any,\n> = [T extends ResultSetHeader ? T : T[], FieldPacket[]];\n\nexport class MySql2PreparedQuery<T extends MySqlPreparedQueryConfig, TIsRqbV2 extends boolean = false>\n\textends MySqlPreparedQuery<T>\n{\n\tstatic override readonly [entityKind]: string = 'MySql2PreparedQuery';\n\n\tprivate rawQuery: QueryOptions;\n\tprivate query: QueryOptions;\n\n\tconstructor(\n\t\tprivate client: MySql2Client,\n\t\tqueryString: string,\n\t\tprivate params: unknown[],\n\t\tprivate logger: Logger,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\tprivate customResultMapper?: (\n\t\t\trows: TIsRqbV2 extends true ? Record<string, unknown>[] : unknown[][],\n\t\t) => T['execute'],\n\t\t// Keys that were used in $default and the value that was generated for them\n\t\tprivate generatedIds?: Record<string, unknown>[],\n\t\t// Keys that should be returned, it has the column with all properries + key from object\n\t\tprivate returningIds?: SelectedFieldsOrdered,\n\t\tprivate isRqbV2Query?: TIsRqbV2,\n\t) {\n\t\tsuper();\n\t\tthis.rawQuery = {\n\t\t\tsql: queryString,\n\t\t\t// rowsAsArray: true,\n\t\t\ttypeCast: function(field: any, next: any) {\n\t\t\t\tif (field.type === 'TIMESTAMP' || field.type === 'DATETIME' || field.type === 'DATE') {\n\t\t\t\t\treturn field.string();\n\t\t\t\t}\n\t\t\t\treturn next();\n\t\t\t},\n\t\t};\n\t\tthis.query = {\n\t\t\tsql: queryString,\n\t\t\trowsAsArray: true,\n\t\t\ttypeCast: function(field: any, next: any) {\n\t\t\t\tif (field.type === 'TIMESTAMP' || field.type === 'DATETIME' || field.type === 'DATE') {\n\t\t\t\t\treturn field.string();\n\t\t\t\t}\n\t\t\t\treturn next();\n\t\t\t},\n\t\t};\n\t}\n\n\tasync execute(placeholderValues: Record<string, unknown> = {}): Promise<T['execute']> {\n\t\tif (this.isRqbV2Query) return this.executeRqbV2(placeholderValues);\n\n\t\tconst params = fillPlaceholders(this.params, placeholderValues);\n\n\t\tthis.logger.logQuery(this.rawQuery.sql, params);\n\n\t\tconst { fields, client, rawQuery, query, joinsNotNullableMap, customResultMapper, returningIds, generatedIds } =\n\t\t\tthis;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst res = await client.query<any>(rawQuery, params);\n\t\t\tconst insertId = res[0].insertId;\n\t\t\tconst affectedRows = res[0].affectedRows;\n\t\t\t// for each row, I need to check keys from\n\t\t\tif (returningIds) {\n\t\t\t\tconst returningResponse = [];\n\t\t\t\tlet j = 0;\n\t\t\t\tfor (let i = insertId; i < insertId + affectedRows; i++) {\n\t\t\t\t\tfor (const column of returningIds) {\n\t\t\t\t\t\tconst key = returningIds[0]!.path[0]!;\n\t\t\t\t\t\tif (is(column.field, Column)) {\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\tif (column.field.primary && column.field.autoIncrement) {\n\t\t\t\t\t\t\t\treturningResponse.push({ [key]: i });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (column.field.defaultFn && generatedIds) {\n\t\t\t\t\t\t\t\t// generatedIds[rowIdx][key]\n\t\t\t\t\t\t\t\treturningResponse.push({ [key]: generatedIds[j]![key] });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tj++;\n\t\t\t\t}\n\n\t\t\t\treturn returningResponse;\n\t\t\t}\n\t\t\treturn res;\n\t\t}\n\n\t\tconst result = await client.query<any[]>(query, params);\n\t\tconst rows = result[0];\n\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper(rows);\n\t\t}\n\n\t\treturn rows.map((row) => mapResultRow<T['execute']>(fields!, row, joinsNotNullableMap));\n\t}\n\n\tprivate async executeRqbV2(placeholderValues: Record<string, unknown> = {}): Promise<T['execute']> {\n\t\tconst params = fillPlaceholders(this.params, placeholderValues);\n\n\t\tthis.logger.logQuery(this.rawQuery.sql, params);\n\n\t\tconst { client, rawQuery, customResultMapper } = this;\n\t\tconst res = await client.query<any>(rawQuery, params);\n\n\t\tconst rows = res[0];\n\n\t\treturn (customResultMapper as (rows: Record<string, unknown>[]) => T['execute'])(rows);\n\t}\n\n\tasync *iterator(\n\t\tplaceholderValues: Record<string, unknown> = {},\n\t): AsyncGenerator<T['execute'] extends any[] ? T['execute'][number] : T['execute']> {\n\t\tconst params = fillPlaceholders(this.params, placeholderValues);\n\t\tconst conn = ((isPool(this.client) ? await this.client.getConnection() : this.client) as {} as {\n\t\t\tconnection: CallbackConnection;\n\t\t}).connection;\n\n\t\tconst { fields, query, rawQuery, joinsNotNullableMap, client, customResultMapper } = this;\n\t\tconst hasRowsMapper = Boolean(fields || customResultMapper);\n\t\tconst driverQuery = hasRowsMapper ? conn.query(query, params) : conn.query(rawQuery, params);\n\n\t\tconst stream = driverQuery.stream();\n\n\t\tfunction dataListener() {\n\t\t\tstream.pause();\n\t\t}\n\n\t\tstream.on('data', dataListener);\n\n\t\ttry {\n\t\t\tconst onEnd = once(stream, 'end');\n\t\t\tconst onError = once(stream, 'error');\n\n\t\t\twhile (true) {\n\t\t\t\tstream.resume();\n\t\t\t\tconst row = await Promise.race([onEnd, onError, new Promise((resolve) => stream.once('data', resolve))]);\n\t\t\t\tif (row === undefined || (Array.isArray(row) && row.length === 0)) {\n\t\t\t\t\tbreak;\n\t\t\t\t} else if (row instanceof Error) { // eslint-disable-line no-instanceof/no-instanceof\n\t\t\t\t\tthrow row;\n\t\t\t\t} else {\n\t\t\t\t\tif (hasRowsMapper) {\n\t\t\t\t\t\tif (customResultMapper) {\n\t\t\t\t\t\t\tconst mappedRow = (customResultMapper as (rows: unknown[][]) => T['execute'])([row as unknown[]]);\n\t\t\t\t\t\t\tyield (Array.isArray(mappedRow) ? mappedRow[0] : mappedRow);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tyield mapResultRow(fields!, row as unknown[], joinsNotNullableMap);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tyield row as T['execute'];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tstream.off('data', dataListener);\n\t\t\tif (isPool(client)) {\n\t\t\t\tconn.end();\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport interface MySql2SessionOptions {\n\tlogger?: Logger;\n\tmode: Mode;\n}\n\nexport class MySql2Session<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTTablesConfig extends TablesRelationalConfig,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends MySqlSession<MySqlQueryResultHKT, MySql2PreparedQueryHKT, TFullSchema, TRelations, TTablesConfig, TSchema> {\n\tstatic override readonly [entityKind]: string = 'MySql2Session';\n\n\tprivate logger: Logger;\n\tprivate mode: Mode;\n\n\tconstructor(\n\t\tprivate client: MySql2Client,\n\t\tdialect: MySqlDialect,\n\t\tprivate relations: AnyRelations | undefined,\n\t\tprivate schema: V1.RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: MySql2SessionOptions,\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t\tthis.mode = options.mode;\n\t}\n\n\tprepareQuery<T extends MySqlPreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\tcustomResultMapper?: (rows: unknown[][]) => T['execute'],\n\t\tgeneratedIds?: Record<string, unknown>[],\n\t\treturningIds?: SelectedFieldsOrdered,\n\t): PreparedQueryKind<MySql2PreparedQueryHKT, T> {\n\t\t// Add returningId fields\n\t\t// Each driver gets them from response from database\n\t\treturn new MySql2PreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery.sql,\n\t\t\tquery.params,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\tcustomResultMapper,\n\t\t\tgeneratedIds,\n\t\t\treturningIds,\n\t\t) as PreparedQueryKind<MySql2PreparedQueryHKT, T>;\n\t}\n\n\tprepareRelationalQuery<T extends MySqlPreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\tcustomResultMapper: (rows: Record<string, unknown>[]) => T['execute'],\n\t\tgeneratedIds?: Record<string, unknown>[],\n\t\treturningIds?: SelectedFieldsOrdered,\n\t): PreparedQueryKind<MySql2PreparedQueryHKT, T> {\n\t\t// Add returningId fields\n\t\t// Each driver gets them from response from database\n\t\treturn new MySql2PreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery.sql,\n\t\t\tquery.params,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\tcustomResultMapper,\n\t\t\tgeneratedIds,\n\t\t\treturningIds,\n\t\t\ttrue,\n\t\t) as any;\n\t}\n\n\t/**\n\t * @internal\n\t * What is its purpose?\n\t */\n\tasync query(query: string, params: unknown[]): Promise<MySqlQueryResult> {\n\t\tthis.logger.logQuery(query, params);\n\t\tconst result = await this.client.query({\n\t\t\tsql: query,\n\t\t\tvalues: params,\n\t\t\trowsAsArray: true,\n\t\t\ttypeCast: function(field: any, next: any) {\n\t\t\t\tif (field.type === 'TIMESTAMP' || field.type === 'DATETIME' || field.type === 'DATE') {\n\t\t\t\t\treturn field.string();\n\t\t\t\t}\n\t\t\t\treturn next();\n\t\t\t},\n\t\t});\n\t\treturn result;\n\t}\n\n\toverride all<T = unknown>(query: SQL): Promise<T[]> {\n\t\tconst querySql = this.dialect.sqlToQuery(query);\n\t\tthis.logger.logQuery(querySql.sql, querySql.params);\n\t\treturn this.client.execute(querySql.sql, querySql.params).then((result) => result[0]) as Promise<T[]>;\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: MySql2Transaction<TFullSchema, TRelations, TTablesConfig, TSchema>) => Promise<T>,\n\t\tconfig?: MySqlTransactionConfig,\n\t): Promise<T> {\n\t\tconst session = isPool(this.client)\n\t\t\t? new MySql2Session(\n\t\t\t\tawait this.client.getConnection(),\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.relations,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.options,\n\t\t\t)\n\t\t\t: this;\n\t\tconst tx = new MySql2Transaction<TFullSchema, TRelations, TTablesConfig, TSchema>(\n\t\t\tthis.dialect,\n\t\t\tsession as MySqlSession<any, any, any, any, any, any>,\n\t\t\tthis.relations,\n\t\t\tthis.schema,\n\t\t\t0,\n\t\t\tthis.mode,\n\t\t);\n\t\tif (config) {\n\t\t\tconst setTransactionConfigSql = this.getSetTransactionSQL(config);\n\t\t\tif (setTransactionConfigSql) {\n\t\t\t\tawait tx.execute(setTransactionConfigSql);\n\t\t\t}\n\t\t\tconst startTransactionSql = this.getStartTransactionSQL(config);\n\t\t\tawait (startTransactionSql ? tx.execute(startTransactionSql) : tx.execute(sql`begin`));\n\t\t} else {\n\t\t\tawait tx.execute(sql`begin`);\n\t\t}\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait tx.execute(sql`commit`);\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait tx.execute(sql`rollback`);\n\t\t\tthrow err;\n\t\t} finally {\n\t\t\tif (isPool(this.client)) {\n\t\t\t\t(session.client as PoolConnection).release();\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport class MySql2Transaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTTablesConfig extends TablesRelationalConfig,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends MySqlTransaction<\n\tMySql2QueryResultHKT,\n\tMySql2PreparedQueryHKT,\n\tTFullSchema,\n\tTRelations,\n\tTTablesConfig,\n\tTSchema\n> {\n\tstatic override readonly [entityKind]: string = 'MySql2Transaction';\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: MySql2Transaction<TFullSchema, TRelations, TTablesConfig, TSchema>) => Promise<T>,\n\t): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex + 1}`;\n\t\tconst tx = new MySql2Transaction<TFullSchema, TRelations, TTablesConfig, TSchema>(\n\t\t\tthis.dialect,\n\t\t\tthis.session,\n\t\t\tthis.relations,\n\t\t\tthis.schema,\n\t\t\tthis.nestedIndex + 1,\n\t\t\tthis.mode,\n\t\t);\n\t\tawait tx.execute(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait tx.execute(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait tx.execute(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nfunction isPool(client: MySql2Client): client is Pool {\n\treturn 'getConnection' in client;\n}\n\nexport interface MySql2QueryResultHKT extends MySqlQueryResultHKT {\n\ttype: MySqlRawQueryResult;\n}\n\nexport interface MySql2PreparedQueryHKT extends MySqlPreparedQueryHKT {\n\ttype: MySql2PreparedQuery<Assume<this['config'], MySqlPreparedQueryConfig>>;\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/mysql2/session.ts"],"sourcesContent":["import type { Connection as CallbackConnection } from 'mysql2';\nimport type {\n\tConnection,\n\tFieldPacket,\n\tOkPacket,\n\tPool,\n\tPoolConnection,\n\tQueryOptions,\n\tResultSetHeader,\n\tRowDataPacket,\n} from 'mysql2/promise';\nimport { once } from 'node:events';\nimport type * as V1 from '~/_relations.ts';\nimport { type Cache, NoopCache } from '~/cache/core/index.ts';\nimport type { WithCacheConfig } from '~/cache/core/types.ts';\nimport { Column } from '~/column.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { MySqlDialect } from '~/mysql-core/dialect.ts';\nimport type { SelectedFieldsOrdered } from '~/mysql-core/query-builders/select.types.ts';\nimport {\n\ttype Mode,\n\tMySqlPreparedQuery,\n\ttype MySqlPreparedQueryConfig,\n\ttype MySqlPreparedQueryHKT,\n\ttype MySqlQueryResultHKT,\n\tMySqlSession,\n\tMySqlTransaction,\n\ttype MySqlTransactionConfig,\n\ttype PreparedQueryKind,\n} from '~/mysql-core/session.ts';\nimport type { AnyRelations, TablesRelationalConfig } from '~/relations.ts';\nimport { fillPlaceholders, sql } from '~/sql/sql.ts';\nimport type { Query, SQL } from '~/sql/sql.ts';\nimport { type Assume, mapResultRow } from '~/utils.ts';\n\nexport type MySql2Client = Pool | Connection;\n\nexport type MySqlRawQueryResult = [ResultSetHeader, FieldPacket[]];\nexport type MySqlQueryResultType = RowDataPacket[][] | RowDataPacket[] | OkPacket | OkPacket[] | ResultSetHeader;\nexport type MySqlQueryResult<\n\tT = any,\n> = [T extends ResultSetHeader ? T : T[], FieldPacket[]];\n\nexport class MySql2PreparedQuery<T extends MySqlPreparedQueryConfig, TIsRqbV2 extends boolean = false>\n\textends MySqlPreparedQuery<T>\n{\n\tstatic override readonly [entityKind]: string = 'MySql2PreparedQuery';\n\n\tprivate rawQuery: QueryOptions;\n\tprivate query: QueryOptions;\n\n\tconstructor(\n\t\tprivate client: MySql2Client,\n\t\tqueryString: string,\n\t\tprivate params: unknown[],\n\t\tprivate logger: Logger,\n\t\tcache: Cache,\n\t\tqueryMetadata: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t} | undefined,\n\t\tcacheConfig: WithCacheConfig | undefined,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\tprivate customResultMapper?: (\n\t\t\trows: TIsRqbV2 extends true ? Record<string, unknown>[] : unknown[][],\n\t\t) => T['execute'],\n\t\t// Keys that were used in $default and the value that was generated for them\n\t\tprivate generatedIds?: Record<string, unknown>[],\n\t\t// Keys that should be returned, it has the column with all properries + key from object\n\t\tprivate returningIds?: SelectedFieldsOrdered,\n\t\tprivate isRqbV2Query?: TIsRqbV2,\n\t) {\n\t\tsuper(cache, queryMetadata, cacheConfig);\n\t\tthis.rawQuery = {\n\t\t\tsql: queryString,\n\t\t\t// rowsAsArray: true,\n\t\t\ttypeCast: function(field: any, next: any) {\n\t\t\t\tif (field.type === 'TIMESTAMP' || field.type === 'DATETIME' || field.type === 'DATE') {\n\t\t\t\t\treturn field.string();\n\t\t\t\t}\n\t\t\t\treturn next();\n\t\t\t},\n\t\t};\n\t\tthis.query = {\n\t\t\tsql: queryString,\n\t\t\trowsAsArray: true,\n\t\t\ttypeCast: function(field: any, next: any) {\n\t\t\t\tif (field.type === 'TIMESTAMP' || field.type === 'DATETIME' || field.type === 'DATE') {\n\t\t\t\t\treturn field.string();\n\t\t\t\t}\n\t\t\t\treturn next();\n\t\t\t},\n\t\t};\n\t}\n\n\tasync execute(placeholderValues: Record<string, unknown> = {}): Promise<T['execute']> {\n\t\tif (this.isRqbV2Query) return this.executeRqbV2(placeholderValues);\n\n\t\tconst params = fillPlaceholders(this.params, placeholderValues);\n\n\t\tthis.logger.logQuery(this.rawQuery.sql, params);\n\n\t\tconst { fields, client, rawQuery, query, joinsNotNullableMap, customResultMapper, returningIds, generatedIds } =\n\t\t\tthis;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst res = await this.queryWithCache(rawQuery.sql, params, async () => {\n\t\t\t\treturn await client.query<any>(rawQuery, params);\n\t\t\t});\n\n\t\t\tconst insertId = res[0].insertId;\n\t\t\tconst affectedRows = res[0].affectedRows;\n\t\t\t// for each row, I need to check keys from\n\t\t\tif (returningIds) {\n\t\t\t\tconst returningResponse = [];\n\t\t\t\tlet j = 0;\n\t\t\t\tfor (let i = insertId; i < insertId + affectedRows; i++) {\n\t\t\t\t\tfor (const column of returningIds) {\n\t\t\t\t\t\tconst key = returningIds[0]!.path[0]!;\n\t\t\t\t\t\tif (is(column.field, Column)) {\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\tif (column.field.primary && column.field.autoIncrement) {\n\t\t\t\t\t\t\t\treturningResponse.push({ [key]: i });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (column.field.defaultFn && generatedIds) {\n\t\t\t\t\t\t\t\t// generatedIds[rowIdx][key]\n\t\t\t\t\t\t\t\treturningResponse.push({ [key]: generatedIds[j]![key] });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tj++;\n\t\t\t\t}\n\n\t\t\t\treturn returningResponse;\n\t\t\t}\n\t\t\treturn res;\n\t\t}\n\n\t\tconst result = await this.queryWithCache(query.sql, params, async () => {\n\t\t\treturn await client.query<any[]>(query, params);\n\t\t});\n\n\t\tconst rows = result[0];\n\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper(rows);\n\t\t}\n\n\t\treturn rows.map((row) => mapResultRow<T['execute']>(fields!, row, joinsNotNullableMap));\n\t}\n\n\tprivate async executeRqbV2(placeholderValues: Record<string, unknown> = {}): Promise<T['execute']> {\n\t\tconst params = fillPlaceholders(this.params, placeholderValues);\n\n\t\tthis.logger.logQuery(this.rawQuery.sql, params);\n\n\t\tconst { client, rawQuery, customResultMapper } = this;\n\t\tconst res = await client.query<any>(rawQuery, params);\n\n\t\tconst rows = res[0];\n\n\t\treturn (customResultMapper as (rows: Record<string, unknown>[]) => T['execute'])(rows);\n\t}\n\n\tasync *iterator(\n\t\tplaceholderValues: Record<string, unknown> = {},\n\t): AsyncGenerator<T['execute'] extends any[] ? T['execute'][number] : T['execute']> {\n\t\tconst params = fillPlaceholders(this.params, placeholderValues);\n\t\tconst conn = ((isPool(this.client) ? await this.client.getConnection() : this.client) as {} as {\n\t\t\tconnection: CallbackConnection;\n\t\t}).connection;\n\n\t\tconst { fields, query, rawQuery, joinsNotNullableMap, client, customResultMapper } = this;\n\t\tconst hasRowsMapper = Boolean(fields || customResultMapper);\n\t\tconst driverQuery = hasRowsMapper ? conn.query(query, params) : conn.query(rawQuery, params);\n\n\t\tconst stream = driverQuery.stream();\n\n\t\tfunction dataListener() {\n\t\t\tstream.pause();\n\t\t}\n\n\t\tstream.on('data', dataListener);\n\n\t\ttry {\n\t\t\tconst onEnd = once(stream, 'end');\n\t\t\tconst onError = once(stream, 'error');\n\n\t\t\twhile (true) {\n\t\t\t\tstream.resume();\n\t\t\t\tconst row = await Promise.race([onEnd, onError, new Promise((resolve) => stream.once('data', resolve))]);\n\t\t\t\tif (row === undefined || (Array.isArray(row) && row.length === 0)) {\n\t\t\t\t\tbreak;\n\t\t\t\t} else if (row instanceof Error) { // eslint-disable-line no-instanceof/no-instanceof\n\t\t\t\t\tthrow row;\n\t\t\t\t} else {\n\t\t\t\t\tif (hasRowsMapper) {\n\t\t\t\t\t\tif (customResultMapper) {\n\t\t\t\t\t\t\tconst mappedRow = (customResultMapper as (rows: unknown[][]) => T['execute'])([row as unknown[]]);\n\t\t\t\t\t\t\tyield (Array.isArray(mappedRow) ? mappedRow[0] : mappedRow);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tyield mapResultRow(fields!, row as unknown[], joinsNotNullableMap);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tyield row as T['execute'];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tstream.off('data', dataListener);\n\t\t\tif (isPool(client)) {\n\t\t\t\tconn.end();\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport interface MySql2SessionOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n\tmode: Mode;\n}\n\nexport class MySql2Session<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTTablesConfig extends TablesRelationalConfig,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends MySqlSession<MySqlQueryResultHKT, MySql2PreparedQueryHKT, TFullSchema, TRelations, TTablesConfig, TSchema> {\n\tstatic override readonly [entityKind]: string = 'MySql2Session';\n\n\tprivate logger: Logger;\n\tprivate mode: Mode;\n\tprivate cache: Cache;\n\n\tconstructor(\n\t\tprivate client: MySql2Client,\n\t\tdialect: MySqlDialect,\n\t\tprivate relations: AnyRelations | undefined,\n\t\tprivate schema: V1.RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: MySql2SessionOptions,\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t\tthis.cache = options.cache ?? new NoopCache();\n\t\tthis.mode = options.mode;\n\t}\n\n\tprepareQuery<T extends MySqlPreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\tcustomResultMapper?: (rows: unknown[][]) => T['execute'],\n\t\tgeneratedIds?: Record<string, unknown>[],\n\t\treturningIds?: SelectedFieldsOrdered,\n\t\tqueryMetadata?: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t},\n\t\tcacheConfig?: WithCacheConfig,\n\t): PreparedQueryKind<MySql2PreparedQueryHKT, T> {\n\t\t// Add returningId fields\n\t\t// Each driver gets them from response from database\n\t\treturn new MySql2PreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery.sql,\n\t\t\tquery.params,\n\t\t\tthis.logger,\n\t\t\tthis.cache,\n\t\t\tqueryMetadata,\n\t\t\tcacheConfig,\n\t\t\tfields,\n\t\t\tcustomResultMapper,\n\t\t\tgeneratedIds,\n\t\t\treturningIds,\n\t\t) as PreparedQueryKind<MySql2PreparedQueryHKT, T>;\n\t}\n\n\tprepareRelationalQuery<T extends MySqlPreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\tcustomResultMapper: (rows: Record<string, unknown>[]) => T['execute'],\n\t\tgeneratedIds?: Record<string, unknown>[],\n\t\treturningIds?: SelectedFieldsOrdered,\n\t): PreparedQueryKind<MySql2PreparedQueryHKT, T> {\n\t\t// Add returningId fields\n\t\t// Each driver gets them from response from database\n\t\treturn new MySql2PreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery.sql,\n\t\t\tquery.params,\n\t\t\tthis.logger,\n\t\t\tthis.cache,\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tfields,\n\t\t\tcustomResultMapper,\n\t\t\tgeneratedIds,\n\t\t\treturningIds,\n\t\t\ttrue,\n\t\t) as any;\n\t}\n\n\t/**\n\t * @internal\n\t * What is its purpose?\n\t */\n\tasync query(query: string, params: unknown[]): Promise<MySqlQueryResult> {\n\t\tthis.logger.logQuery(query, params);\n\t\tconst result = await this.client.query({\n\t\t\tsql: query,\n\t\t\tvalues: params,\n\t\t\trowsAsArray: true,\n\t\t\ttypeCast: function(field: any, next: any) {\n\t\t\t\tif (field.type === 'TIMESTAMP' || field.type === 'DATETIME' || field.type === 'DATE') {\n\t\t\t\t\treturn field.string();\n\t\t\t\t}\n\t\t\t\treturn next();\n\t\t\t},\n\t\t});\n\t\treturn result;\n\t}\n\n\toverride all<T = unknown>(query: SQL): Promise<T[]> {\n\t\tconst querySql = this.dialect.sqlToQuery(query);\n\t\tthis.logger.logQuery(querySql.sql, querySql.params);\n\t\treturn this.client.execute(querySql.sql, querySql.params).then((result) => result[0]) as Promise<T[]>;\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: MySql2Transaction<TFullSchema, TRelations, TTablesConfig, TSchema>) => Promise<T>,\n\t\tconfig?: MySqlTransactionConfig,\n\t): Promise<T> {\n\t\tconst session = isPool(this.client)\n\t\t\t? new MySql2Session(\n\t\t\t\tawait this.client.getConnection(),\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.relations,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.options,\n\t\t\t)\n\t\t\t: this;\n\t\tconst tx = new MySql2Transaction<TFullSchema, TRelations, TTablesConfig, TSchema>(\n\t\t\tthis.dialect,\n\t\t\tsession as MySqlSession<any, any, any, any, any, any>,\n\t\t\tthis.relations,\n\t\t\tthis.schema,\n\t\t\t0,\n\t\t\tthis.mode,\n\t\t);\n\t\tif (config) {\n\t\t\tconst setTransactionConfigSql = this.getSetTransactionSQL(config);\n\t\t\tif (setTransactionConfigSql) {\n\t\t\t\tawait tx.execute(setTransactionConfigSql);\n\t\t\t}\n\t\t\tconst startTransactionSql = this.getStartTransactionSQL(config);\n\t\t\tawait (startTransactionSql ? tx.execute(startTransactionSql) : tx.execute(sql`begin`));\n\t\t} else {\n\t\t\tawait tx.execute(sql`begin`);\n\t\t}\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait tx.execute(sql`commit`);\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait tx.execute(sql`rollback`);\n\t\t\tthrow err;\n\t\t} finally {\n\t\t\tif (isPool(this.client)) {\n\t\t\t\t(session.client as PoolConnection).release();\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport class MySql2Transaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTTablesConfig extends TablesRelationalConfig,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends MySqlTransaction<\n\tMySql2QueryResultHKT,\n\tMySql2PreparedQueryHKT,\n\tTFullSchema,\n\tTRelations,\n\tTTablesConfig,\n\tTSchema\n> {\n\tstatic override readonly [entityKind]: string = 'MySql2Transaction';\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: MySql2Transaction<TFullSchema, TRelations, TTablesConfig, TSchema>) => Promise<T>,\n\t): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex + 1}`;\n\t\tconst tx = new MySql2Transaction<TFullSchema, TRelations, TTablesConfig, TSchema>(\n\t\t\tthis.dialect,\n\t\t\tthis.session,\n\t\t\tthis.relations,\n\t\t\tthis.schema,\n\t\t\tthis.nestedIndex + 1,\n\t\t\tthis.mode,\n\t\t);\n\t\tawait tx.execute(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait tx.execute(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait tx.execute(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nfunction isPool(client: MySql2Client): client is Pool {\n\treturn 'getConnection' in client;\n}\n\nexport interface MySql2QueryResultHKT extends MySqlQueryResultHKT {\n\ttype: MySqlRawQueryResult;\n}\n\nexport interface MySql2PreparedQueryHKT extends MySqlPreparedQueryHKT {\n\ttype: MySql2PreparedQuery<Assume<this['config'], MySqlPreparedQueryConfig>>;\n}\n"],"mappings":"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","names":[]}
package/neon/index.cjs CHANGED
@@ -15,11 +15,11 @@ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "defau
15
15
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
16
16
  var neon_exports = {};
17
17
  module.exports = __toCommonJS(neon_exports);
18
- __reExport(neon_exports, require("./neon-identity.cjs"), module.exports);
18
+ __reExport(neon_exports, require("./neon-auth.cjs"), module.exports);
19
19
  __reExport(neon_exports, require("./rls.cjs"), module.exports);
20
20
  // Annotate the CommonJS export names for ESM import in node:
21
21
  0 && (module.exports = {
22
- ...require("./neon-identity.cjs"),
22
+ ...require("./neon-auth.cjs"),
23
23
  ...require("./rls.cjs")
24
24
  });
25
25
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/neon/index.ts"],"sourcesContent":["export * from './neon-identity.ts';\nexport * from './rls.ts';\n"],"mappings":";;;;;;;;;;;;;;;AAAA;AAAA;AAAA,yBAAc,+BAAd;AACA,yBAAc,qBADd;","names":[]}
1
+ {"version":3,"sources":["../../src/neon/index.ts"],"sourcesContent":["export * from './neon-auth.ts';\nexport * from './rls.ts';\n"],"mappings":";;;;;;;;;;;;;;;AAAA;AAAA;AAAA,yBAAc,2BAAd;AACA,yBAAc,qBADd;","names":[]}
package/neon/index.d.cts CHANGED
@@ -1,2 +1,2 @@
1
- export * from "./neon-identity.cjs";
1
+ export * from "./neon-auth.cjs";
2
2
  export * from "./rls.cjs";
package/neon/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export * from "./neon-identity.js";
1
+ export * from "./neon-auth.js";
2
2
  export * from "./rls.js";
package/neon/index.js CHANGED
@@ -1,3 +1,3 @@
1
- export * from "./neon-identity.js";
1
+ export * from "./neon-auth.js";
2
2
  export * from "./rls.js";
3
3
  //# sourceMappingURL=index.js.map
package/neon/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/neon/index.ts"],"sourcesContent":["export * from './neon-identity.ts';\nexport * from './rls.ts';\n"],"mappings":"AAAA,cAAc;AACd,cAAc;","names":[]}
1
+ {"version":3,"sources":["../../src/neon/index.ts"],"sourcesContent":["export * from './neon-auth.ts';\nexport * from './rls.ts';\n"],"mappings":"AAAA,cAAc;AACd,cAAc;","names":[]}
@@ -16,11 +16,11 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var neon_identity_exports = {};
20
- __export(neon_identity_exports, {
19
+ var neon_auth_exports = {};
20
+ __export(neon_auth_exports, {
21
21
  usersSync: () => usersSync
22
22
  });
23
- module.exports = __toCommonJS(neon_identity_exports);
23
+ module.exports = __toCommonJS(neon_auth_exports);
24
24
  var import_pg_core = require("../pg-core/index.cjs");
25
25
  const neonAuthSchema = (0, import_pg_core.pgSchema)("neon_auth");
26
26
  const usersSync = neonAuthSchema.table("users_sync", {
@@ -29,10 +29,11 @@ const usersSync = neonAuthSchema.table("users_sync", {
29
29
  name: (0, import_pg_core.text)(),
30
30
  email: (0, import_pg_core.text)(),
31
31
  createdAt: (0, import_pg_core.timestamp)("created_at", { withTimezone: true, mode: "string" }),
32
- deletedAt: (0, import_pg_core.timestamp)("deleted_at", { withTimezone: true, mode: "string" })
32
+ deletedAt: (0, import_pg_core.timestamp)("deleted_at", { withTimezone: true, mode: "string" }),
33
+ updatedAt: (0, import_pg_core.timestamp)("updated_at", { withTimezone: true, mode: "string" })
33
34
  });
34
35
  // Annotate the CommonJS export names for ESM import in node:
35
36
  0 && (module.exports = {
36
37
  usersSync
37
38
  });
38
- //# sourceMappingURL=neon-identity.cjs.map
39
+ //# sourceMappingURL=neon-auth.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/neon/neon-auth.ts"],"sourcesContent":["import { jsonb, pgSchema, text, timestamp } from '~/pg-core/index.ts';\n\nconst neonAuthSchema = pgSchema('neon_auth');\n\n/**\n * Table schema of the `users_sync` table used by Neon Auth.\n * This table automatically synchronizes and stores user data from external authentication providers.\n *\n * @schema neon_auth\n * @table users_sync\n */\nexport const usersSync = neonAuthSchema.table('users_sync', {\n\trawJson: jsonb('raw_json').notNull(),\n\tid: text().primaryKey().notNull(),\n\tname: text(),\n\temail: text(),\n\tcreatedAt: timestamp('created_at', { withTimezone: true, mode: 'string' }),\n\tdeletedAt: timestamp('deleted_at', { withTimezone: true, mode: 'string' }),\n\tupdatedAt: timestamp('updated_at', { withTimezone: true, mode: 'string' }),\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAiD;AAEjD,MAAM,qBAAiB,yBAAS,WAAW;AASpC,MAAM,YAAY,eAAe,MAAM,cAAc;AAAA,EAC3D,aAAS,sBAAM,UAAU,EAAE,QAAQ;AAAA,EACnC,QAAI,qBAAK,EAAE,WAAW,EAAE,QAAQ;AAAA,EAChC,UAAM,qBAAK;AAAA,EACX,WAAO,qBAAK;AAAA,EACZ,eAAW,0BAAU,cAAc,EAAE,cAAc,MAAM,MAAM,SAAS,CAAC;AAAA,EACzE,eAAW,0BAAU,cAAc,EAAE,cAAc,MAAM,MAAM,SAAS,CAAC;AAAA,EACzE,eAAW,0BAAU,cAAc,EAAE,cAAc,MAAM,MAAM,SAAS,CAAC;AAC1E,CAAC;","names":[]}
@@ -111,6 +111,23 @@ export declare const usersSync: import("../pg-core/index.ts").PgTableWithColumns
111
111
  identity: undefined;
112
112
  generated: undefined;
113
113
  }, {}, {}>;
114
+ updatedAt: import("../pg-core/index.ts").PgColumn<{
115
+ name: "updated_at";
116
+ tableName: "users_sync";
117
+ dataType: "string";
118
+ columnType: "PgTimestampString";
119
+ data: string;
120
+ driverParam: string;
121
+ notNull: false;
122
+ hasDefault: false;
123
+ isPrimaryKey: false;
124
+ isAutoincrement: false;
125
+ hasRuntimeDefault: false;
126
+ enumValues: undefined;
127
+ baseColumn: never;
128
+ identity: undefined;
129
+ generated: undefined;
130
+ }, {}, {}>;
114
131
  };
115
132
  dialect: "pg";
116
133
  }>;
@@ -111,6 +111,23 @@ export declare const usersSync: import("../pg-core/index.js").PgTableWithColumns
111
111
  identity: undefined;
112
112
  generated: undefined;
113
113
  }, {}, {}>;
114
+ updatedAt: import("../pg-core/index.js").PgColumn<{
115
+ name: "updated_at";
116
+ tableName: "users_sync";
117
+ dataType: "string";
118
+ columnType: "PgTimestampString";
119
+ data: string;
120
+ driverParam: string;
121
+ notNull: false;
122
+ hasDefault: false;
123
+ isPrimaryKey: false;
124
+ isAutoincrement: false;
125
+ hasRuntimeDefault: false;
126
+ enumValues: undefined;
127
+ baseColumn: never;
128
+ identity: undefined;
129
+ generated: undefined;
130
+ }, {}, {}>;
114
131
  };
115
132
  dialect: "pg";
116
133
  }>;
@@ -6,9 +6,10 @@ const usersSync = neonAuthSchema.table("users_sync", {
6
6
  name: text(),
7
7
  email: text(),
8
8
  createdAt: timestamp("created_at", { withTimezone: true, mode: "string" }),
9
- deletedAt: timestamp("deleted_at", { withTimezone: true, mode: "string" })
9
+ deletedAt: timestamp("deleted_at", { withTimezone: true, mode: "string" }),
10
+ updatedAt: timestamp("updated_at", { withTimezone: true, mode: "string" })
10
11
  });
11
12
  export {
12
13
  usersSync
13
14
  };
14
- //# sourceMappingURL=neon-identity.js.map
15
+ //# sourceMappingURL=neon-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/neon/neon-auth.ts"],"sourcesContent":["import { jsonb, pgSchema, text, timestamp } from '~/pg-core/index.ts';\n\nconst neonAuthSchema = pgSchema('neon_auth');\n\n/**\n * Table schema of the `users_sync` table used by Neon Auth.\n * This table automatically synchronizes and stores user data from external authentication providers.\n *\n * @schema neon_auth\n * @table users_sync\n */\nexport const usersSync = neonAuthSchema.table('users_sync', {\n\trawJson: jsonb('raw_json').notNull(),\n\tid: text().primaryKey().notNull(),\n\tname: text(),\n\temail: text(),\n\tcreatedAt: timestamp('created_at', { withTimezone: true, mode: 'string' }),\n\tdeletedAt: timestamp('deleted_at', { withTimezone: true, mode: 'string' }),\n\tupdatedAt: timestamp('updated_at', { withTimezone: true, mode: 'string' }),\n});\n"],"mappings":"AAAA,SAAS,OAAO,UAAU,MAAM,iBAAiB;AAEjD,MAAM,iBAAiB,SAAS,WAAW;AASpC,MAAM,YAAY,eAAe,MAAM,cAAc;AAAA,EAC3D,SAAS,MAAM,UAAU,EAAE,QAAQ;AAAA,EACnC,IAAI,KAAK,EAAE,WAAW,EAAE,QAAQ;AAAA,EAChC,MAAM,KAAK;AAAA,EACX,OAAO,KAAK;AAAA,EACZ,WAAW,UAAU,cAAc,EAAE,cAAc,MAAM,MAAM,SAAS,CAAC;AAAA,EACzE,WAAW,UAAU,cAAc,EAAE,cAAc,MAAM,MAAM,SAAS,CAAC;AAAA,EACzE,WAAW,UAAU,cAAc,EAAE,cAAc,MAAM,MAAM,SAAS,CAAC;AAC1E,CAAC;","names":[]}
@@ -51,7 +51,8 @@ class NeonHttpDriver {
51
51
  static [import_entity.entityKind] = "NeonHttpDriver";
52
52
  createSession(relations, schema) {
53
53
  return new import_session.NeonHttpSession(this.client, this.dialect, relations ?? {}, schema, {
54
- logger: this.options.logger
54
+ logger: this.options.logger,
55
+ cache: this.options.cache
55
56
  });
56
57
  }
57
58
  initMappers() {
@@ -70,12 +71,9 @@ function wrap(target, token, cb, deep) {
70
71
  return new Proxy(target, {
71
72
  get(target2, p) {
72
73
  const element = target2[p];
73
- if (typeof element !== "function" && (typeof element !== "object" || element === null))
74
- return element;
75
- if (deep)
76
- return wrap(element, token, cb);
77
- if (p === "query" || p === "_query")
78
- return wrap(element, token, cb, true);
74
+ if (typeof element !== "function" && (typeof element !== "object" || element === null)) return element;
75
+ if (deep) return wrap(element, token, cb);
76
+ if (p === "query" || p === "_query") return wrap(element, token, cb, true);
79
77
  return new Proxy(element, {
80
78
  apply(target3, thisArg, argArray) {
81
79
  const res = target3.call(thisArg, ...argArray);
@@ -124,7 +122,7 @@ function construct(client, config = {}) {
124
122
  };
125
123
  }
126
124
  const relations = config.relations;
127
- const driver = new NeonHttpDriver(client, dialect, { logger });
125
+ const driver = new NeonHttpDriver(client, dialect, { logger, cache: config.cache });
128
126
  const session = driver.createSession(relations, schema);
129
127
  const db = new NeonHttpDatabase(
130
128
  dialect,
@@ -133,6 +131,10 @@ function construct(client, config = {}) {
133
131
  schema
134
132
  );
135
133
  db.$client = client;
134
+ db.$cache = config.cache;
135
+ if (db.$cache) {
136
+ db.$cache["invalidate"] = config.cache?.onMutate;
137
+ }
136
138
  return db;
137
139
  }
138
140
  function drizzle(...params) {
@@ -142,8 +144,7 @@ function drizzle(...params) {
142
144
  }
143
145
  if ((0, import_utils.isConfig)(params[0])) {
144
146
  const { connection, client, ...drizzleConfig } = params[0];
145
- if (client)
146
- return construct(client, drizzleConfig);
147
+ if (client) return construct(client, drizzleConfig);
147
148
  if (typeof connection === "object") {
148
149
  const { connectionString, ...options } = connection;
149
150
  const instance2 = (0, import_serverless.neon)(connectionString, options);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/neon-http/driver.ts"],"sourcesContent":["import type { HTTPQueryOptions, HTTPTransactionOptions, NeonQueryFunction } from '@neondatabase/serverless';\nimport { neon, types } from '@neondatabase/serverless';\nimport * as V1 from '~/_relations.ts';\nimport type { BatchItem, BatchResponse } from '~/batch.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { PgDatabase } from '~/pg-core/db.ts';\nimport { PgDialect } from '~/pg-core/dialect.ts';\nimport type {\n\tAnyRelations,\n\tEmptyRelations,\n\tExtractTablesWithRelations,\n\tRelations,\n\tTablesRelationalConfig,\n} from '~/relations.ts';\nimport { type DrizzleConfig, isConfig } from '~/utils.ts';\nimport { type NeonHttpClient, type NeonHttpQueryResultHKT, NeonHttpSession } from './session.ts';\n\nexport interface NeonDriverOptions {\n\tlogger?: Logger;\n}\n\nexport class NeonHttpDriver {\n\tstatic readonly [entityKind]: string = 'NeonHttpDriver';\n\n\tconstructor(\n\t\tprivate client: NeonHttpClient,\n\t\tprivate dialect: PgDialect,\n\t\tprivate options: NeonDriverOptions = {},\n\t) {\n\t\tthis.initMappers();\n\t}\n\n\tcreateSession(\n\t\trelations: Relations | undefined,\n\t\tschema: V1.RelationalSchemaConfig<V1.TablesRelationalConfig> | undefined,\n\t): NeonHttpSession<Record<string, unknown>, EmptyRelations, TablesRelationalConfig, V1.TablesRelationalConfig> {\n\t\treturn new NeonHttpSession(this.client, this.dialect, relations ?? {} as EmptyRelations, schema, {\n\t\t\tlogger: this.options.logger,\n\t\t});\n\t}\n\n\tinitMappers() {\n\t\ttypes.setTypeParser(types.builtins.TIMESTAMPTZ, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.TIMESTAMP, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.DATE, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.INTERVAL, (val) => val);\n\t\ttypes.setTypeParser(1231, (val) => val);\n\t\ttypes.setTypeParser(1115, (val) => val);\n\t\ttypes.setTypeParser(1185, (val) => val);\n\t\ttypes.setTypeParser(1187, (val) => val);\n\t\ttypes.setTypeParser(1182, (val) => val);\n\t}\n}\n\nfunction wrap<T extends object>(\n\ttarget: T,\n\ttoken: Exclude<HTTPQueryOptions<true, true>['authToken'], undefined>,\n\tcb: (target: any, p: string | symbol, res: any) => any,\n\tdeep?: boolean,\n) {\n\treturn new Proxy(target, {\n\t\tget(target, p) {\n\t\t\tconst element = target[p as keyof typeof p];\n\t\t\tif (typeof element !== 'function' && (typeof element !== 'object' || element === null)) return element;\n\n\t\t\tif (deep) return wrap(element, token, cb);\n\t\t\tif (p === 'query' || p === '_query') return wrap(element, token, cb, true);\n\n\t\t\treturn new Proxy(element as any, {\n\t\t\t\tapply(target, thisArg, argArray) {\n\t\t\t\t\tconst res = target.call(thisArg, ...argArray);\n\t\t\t\t\tif (typeof res === 'object' && res !== null && 'setToken' in res && typeof res.setToken === 'function') {\n\t\t\t\t\t\tres.setToken(token);\n\t\t\t\t\t}\n\t\t\t\t\treturn cb(target, p, res);\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t});\n}\n\nexport class NeonHttpDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n> extends PgDatabase<NeonHttpQueryResultHKT, TSchema, TRelations> {\n\tstatic override readonly [entityKind]: string = 'NeonHttpDatabase';\n\n\t$withAuth(\n\t\ttoken: Exclude<HTTPQueryOptions<true, true>['authToken'], undefined>,\n\t): Omit<\n\t\tthis,\n\t\tExclude<\n\t\t\tkeyof this,\n\t\t\t| '$count'\n\t\t\t| 'delete'\n\t\t\t| 'select'\n\t\t\t| 'selectDistinct'\n\t\t\t| 'selectDistinctOn'\n\t\t\t| 'update'\n\t\t\t| 'insert'\n\t\t\t| 'with'\n\t\t\t| '_query'\n\t\t\t| 'query'\n\t\t\t| 'execute'\n\t\t\t| 'refreshMaterializedView'\n\t\t>\n\t> {\n\t\tthis.authToken = token;\n\n\t\treturn wrap(this, token, (target, p, res) => {\n\t\t\tif (p === 'with') {\n\t\t\t\treturn wrap(res, token, (_, __, res) => res);\n\t\t\t}\n\t\t\treturn res;\n\t\t});\n\t}\n\n\t/** @internal */\n\tdeclare readonly session: NeonHttpSession<\n\t\tTSchema,\n\t\tTRelations,\n\t\tExtractTablesWithRelations<TRelations>,\n\t\tV1.ExtractTablesWithRelations<TSchema>\n\t>;\n\n\tasync batch<U extends BatchItem<'pg'>, T extends Readonly<[U, ...U[]]>>(\n\t\tbatch: T,\n\t): Promise<BatchResponse<T>> {\n\t\treturn this.session.batch(batch) as Promise<BatchResponse<T>>;\n\t}\n}\n\nfunction construct<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n\tTClient extends NeonQueryFunction<any, any> = NeonQueryFunction<any, any>,\n>(\n\tclient: TClient,\n\tconfig: DrizzleConfig<TSchema, TRelations> = {},\n): NeonHttpDatabase<TSchema, TRelations> & {\n\t$client: TClient;\n} {\n\tconst dialect = new PgDialect({ casing: config.casing });\n\tlet logger;\n\tif (config.logger === true) {\n\t\tlogger = new DefaultLogger();\n\t} else if (config.logger !== false) {\n\t\tlogger = config.logger;\n\t}\n\n\tlet schema: V1.RelationalSchemaConfig<V1.TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tconst tablesConfig = V1.extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tV1.createTableRelationsHelpers,\n\t\t);\n\t\tschema = {\n\t\t\tfullSchema: config.schema,\n\t\t\tschema: tablesConfig.tables,\n\t\t\ttableNamesMap: tablesConfig.tableNamesMap,\n\t\t};\n\t}\n\n\tconst relations = config.relations;\n\n\tconst driver = new NeonHttpDriver(client, dialect, { logger });\n\tconst session = driver.createSession(relations, schema);\n\n\tconst db = new NeonHttpDatabase(\n\t\tdialect,\n\t\tsession,\n\t\trelations,\n\t\tschema as V1.RelationalSchemaConfig<V1.ExtractTablesWithRelations<TSchema>> | undefined,\n\t);\n\t(<any> db).$client = client;\n\n\treturn db as any;\n}\n\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n\tTClient extends NeonQueryFunction<any, any> = NeonQueryFunction<false, false>,\n>(\n\t...params: [\n\t\tTClient | string,\n\t] | [\n\t\tTClient | string,\n\t\tDrizzleConfig<TSchema, TRelations>,\n\t] | [\n\t\t(\n\t\t\t& DrizzleConfig<TSchema, TRelations>\n\t\t\t& ({\n\t\t\t\tconnection: string | ({ connectionString: string } & HTTPTransactionOptions<boolean, boolean>);\n\t\t\t} | {\n\t\t\t\tclient: TClient;\n\t\t\t})\n\t\t),\n\t]\n): NeonHttpDatabase<TSchema, TRelations> & {\n\t$client: TClient;\n} {\n\tif (typeof params[0] === 'string') {\n\t\tconst instance = neon(params[0] as string);\n\t\treturn construct(instance, params[1]) as any;\n\t}\n\n\tif (isConfig(params[0])) {\n\t\tconst { connection, client, ...drizzleConfig } = params[0] as\n\t\t\t& {\n\t\t\t\tconnection?:\n\t\t\t\t\t| ({\n\t\t\t\t\t\tconnectionString: string;\n\t\t\t\t\t} & HTTPTransactionOptions<boolean, boolean>)\n\t\t\t\t\t| string;\n\t\t\t\tclient?: TClient;\n\t\t\t}\n\t\t\t& DrizzleConfig<TSchema, TRelations>;\n\n\t\tif (client) return construct(client, drizzleConfig);\n\n\t\tif (typeof connection === 'object') {\n\t\t\tconst { connectionString, ...options } = connection;\n\n\t\t\tconst instance = neon(connectionString, options);\n\n\t\t\treturn construct(instance, drizzleConfig) as any;\n\t\t}\n\n\t\tconst instance = neon(connection!);\n\n\t\treturn construct(instance, drizzleConfig) as any;\n\t}\n\n\treturn construct(params[0] as TClient, params[1] as DrizzleConfig<TSchema, TRelations> | undefined) as any;\n}\n\nexport namespace drizzle {\n\texport function mock<\n\t\tTSchema extends Record<string, unknown> = Record<string, never>,\n\t\tTRelations extends AnyRelations = EmptyRelations,\n\t>(\n\t\tconfig?: DrizzleConfig<TSchema, TRelations>,\n\t): NeonHttpDatabase<TSchema, TRelations> & {\n\t\t$client: '$client is not available on drizzle.mock()';\n\t} {\n\t\treturn construct({} as any, config) as any;\n\t}\n}\n"],"mappings":"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","names":["target","res","instance","drizzle"]}
1
+ {"version":3,"sources":["../../src/neon-http/driver.ts"],"sourcesContent":["import type { HTTPQueryOptions, HTTPTransactionOptions, NeonQueryFunction } from '@neondatabase/serverless';\nimport { neon, types } from '@neondatabase/serverless';\nimport * as V1 from '~/_relations.ts';\nimport type { BatchItem, BatchResponse } from '~/batch.ts';\nimport type { Cache } from '~/cache/core/cache.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { PgDatabase } from '~/pg-core/db.ts';\nimport { PgDialect } from '~/pg-core/dialect.ts';\nimport type {\n\tAnyRelations,\n\tEmptyRelations,\n\tExtractTablesWithRelations,\n\tRelations,\n\tTablesRelationalConfig,\n} from '~/relations.ts';\nimport { type DrizzleConfig, isConfig } from '~/utils.ts';\nimport { type NeonHttpClient, type NeonHttpQueryResultHKT, NeonHttpSession } from './session.ts';\n\nexport interface NeonDriverOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n}\n\nexport class NeonHttpDriver {\n\tstatic readonly [entityKind]: string = 'NeonHttpDriver';\n\n\tconstructor(\n\t\tprivate client: NeonHttpClient,\n\t\tprivate dialect: PgDialect,\n\t\tprivate options: NeonDriverOptions = {},\n\t) {\n\t\tthis.initMappers();\n\t}\n\n\tcreateSession(\n\t\trelations: Relations | undefined,\n\t\tschema: V1.RelationalSchemaConfig<V1.TablesRelationalConfig> | undefined,\n\t): NeonHttpSession<Record<string, unknown>, EmptyRelations, TablesRelationalConfig, V1.TablesRelationalConfig> {\n\t\treturn new NeonHttpSession(this.client, this.dialect, relations ?? {} as EmptyRelations, schema, {\n\t\t\tlogger: this.options.logger,\n\t\t\tcache: this.options.cache,\n\t\t});\n\t}\n\n\tinitMappers() {\n\t\ttypes.setTypeParser(types.builtins.TIMESTAMPTZ, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.TIMESTAMP, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.DATE, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.INTERVAL, (val) => val);\n\t\ttypes.setTypeParser(1231, (val) => val);\n\t\ttypes.setTypeParser(1115, (val) => val);\n\t\ttypes.setTypeParser(1185, (val) => val);\n\t\ttypes.setTypeParser(1187, (val) => val);\n\t\ttypes.setTypeParser(1182, (val) => val);\n\t}\n}\n\nfunction wrap<T extends object>(\n\ttarget: T,\n\ttoken: Exclude<HTTPQueryOptions<true, true>['authToken'], undefined>,\n\tcb: (target: any, p: string | symbol, res: any) => any,\n\tdeep?: boolean,\n) {\n\treturn new Proxy(target, {\n\t\tget(target, p) {\n\t\t\tconst element = target[p as keyof typeof p];\n\t\t\tif (typeof element !== 'function' && (typeof element !== 'object' || element === null)) return element;\n\n\t\t\tif (deep) return wrap(element, token, cb);\n\t\t\tif (p === 'query' || p === '_query') return wrap(element, token, cb, true);\n\n\t\t\treturn new Proxy(element as any, {\n\t\t\t\tapply(target, thisArg, argArray) {\n\t\t\t\t\tconst res = target.call(thisArg, ...argArray);\n\t\t\t\t\tif (typeof res === 'object' && res !== null && 'setToken' in res && typeof res.setToken === 'function') {\n\t\t\t\t\t\tres.setToken(token);\n\t\t\t\t\t}\n\t\t\t\t\treturn cb(target, p, res);\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t});\n}\n\nexport class NeonHttpDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n> extends PgDatabase<NeonHttpQueryResultHKT, TSchema, TRelations> {\n\tstatic override readonly [entityKind]: string = 'NeonHttpDatabase';\n\n\t$withAuth(\n\t\ttoken: Exclude<HTTPQueryOptions<true, true>['authToken'], undefined>,\n\t): Omit<\n\t\tthis,\n\t\tExclude<\n\t\t\tkeyof this,\n\t\t\t| '$count'\n\t\t\t| 'delete'\n\t\t\t| 'select'\n\t\t\t| 'selectDistinct'\n\t\t\t| 'selectDistinctOn'\n\t\t\t| 'update'\n\t\t\t| 'insert'\n\t\t\t| 'with'\n\t\t\t| '_query'\n\t\t\t| 'query'\n\t\t\t| 'execute'\n\t\t\t| 'refreshMaterializedView'\n\t\t>\n\t> {\n\t\tthis.authToken = token;\n\n\t\treturn wrap(this, token, (target, p, res) => {\n\t\t\tif (p === 'with') {\n\t\t\t\treturn wrap(res, token, (_, __, res) => res);\n\t\t\t}\n\t\t\treturn res;\n\t\t});\n\t}\n\n\t/** @internal */\n\tdeclare readonly session: NeonHttpSession<\n\t\tTSchema,\n\t\tTRelations,\n\t\tExtractTablesWithRelations<TRelations>,\n\t\tV1.ExtractTablesWithRelations<TSchema>\n\t>;\n\n\tasync batch<U extends BatchItem<'pg'>, T extends Readonly<[U, ...U[]]>>(\n\t\tbatch: T,\n\t): Promise<BatchResponse<T>> {\n\t\treturn this.session.batch(batch) as Promise<BatchResponse<T>>;\n\t}\n}\n\nfunction construct<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n\tTClient extends NeonQueryFunction<any, any> = NeonQueryFunction<any, any>,\n>(\n\tclient: TClient,\n\tconfig: DrizzleConfig<TSchema, TRelations> = {},\n): NeonHttpDatabase<TSchema, TRelations> & {\n\t$client: TClient;\n} {\n\tconst dialect = new PgDialect({ casing: config.casing });\n\tlet logger;\n\tif (config.logger === true) {\n\t\tlogger = new DefaultLogger();\n\t} else if (config.logger !== false) {\n\t\tlogger = config.logger;\n\t}\n\n\tlet schema: V1.RelationalSchemaConfig<V1.TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tconst tablesConfig = V1.extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tV1.createTableRelationsHelpers,\n\t\t);\n\t\tschema = {\n\t\t\tfullSchema: config.schema,\n\t\t\tschema: tablesConfig.tables,\n\t\t\ttableNamesMap: tablesConfig.tableNamesMap,\n\t\t};\n\t}\n\n\tconst relations = config.relations;\n\n\tconst driver = new NeonHttpDriver(client, dialect, { logger, cache: config.cache });\n\tconst session = driver.createSession(relations, schema);\n\n\tconst db = new NeonHttpDatabase(\n\t\tdialect,\n\t\tsession,\n\t\trelations,\n\t\tschema as V1.RelationalSchemaConfig<V1.ExtractTablesWithRelations<TSchema>> | undefined,\n\t);\n\t(<any> db).$client = client;\n\t(<any> db).$cache = config.cache;\n\tif ((<any> db).$cache) {\n\t\t(<any> db).$cache['invalidate'] = config.cache?.onMutate;\n\t}\n\n\treturn db as any;\n}\n\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n\tTClient extends NeonQueryFunction<any, any> = NeonQueryFunction<false, false>,\n>(\n\t...params: [\n\t\tTClient | string,\n\t] | [\n\t\tTClient | string,\n\t\tDrizzleConfig<TSchema, TRelations>,\n\t] | [\n\t\t(\n\t\t\t& DrizzleConfig<TSchema, TRelations>\n\t\t\t& ({\n\t\t\t\tconnection: string | ({ connectionString: string } & HTTPTransactionOptions<boolean, boolean>);\n\t\t\t} | {\n\t\t\t\tclient: TClient;\n\t\t\t})\n\t\t),\n\t]\n): NeonHttpDatabase<TSchema, TRelations> & {\n\t$client: TClient;\n} {\n\tif (typeof params[0] === 'string') {\n\t\tconst instance = neon(params[0] as string);\n\t\treturn construct(instance, params[1]) as any;\n\t}\n\n\tif (isConfig(params[0])) {\n\t\tconst { connection, client, ...drizzleConfig } = params[0] as\n\t\t\t& {\n\t\t\t\tconnection?:\n\t\t\t\t\t| ({\n\t\t\t\t\t\tconnectionString: string;\n\t\t\t\t\t} & HTTPTransactionOptions<boolean, boolean>)\n\t\t\t\t\t| string;\n\t\t\t\tclient?: TClient;\n\t\t\t}\n\t\t\t& DrizzleConfig<TSchema, TRelations>;\n\n\t\tif (client) return construct(client, drizzleConfig);\n\n\t\tif (typeof connection === 'object') {\n\t\t\tconst { connectionString, ...options } = connection;\n\n\t\t\tconst instance = neon(connectionString, options);\n\n\t\t\treturn construct(instance, drizzleConfig) as any;\n\t\t}\n\n\t\tconst instance = neon(connection!);\n\n\t\treturn construct(instance, drizzleConfig) as any;\n\t}\n\n\treturn construct(params[0] as TClient, params[1] as DrizzleConfig<TSchema, TRelations> | undefined) as any;\n}\n\nexport namespace drizzle {\n\texport function mock<\n\t\tTSchema extends Record<string, unknown> = Record<string, never>,\n\t\tTRelations extends AnyRelations = EmptyRelations,\n\t>(\n\t\tconfig?: DrizzleConfig<TSchema, TRelations>,\n\t): NeonHttpDatabase<TSchema, TRelations> & {\n\t\t$client: '$client is not available on drizzle.mock()';\n\t} {\n\t\treturn construct({} as any, config) as any;\n\t}\n}\n"],"mappings":"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","names":["target","res","instance","drizzle"]}
@@ -1,6 +1,7 @@
1
1
  import type { HTTPQueryOptions, HTTPTransactionOptions, NeonQueryFunction } from '@neondatabase/serverless';
2
2
  import * as V1 from "../_relations.cjs";
3
3
  import type { BatchItem, BatchResponse } from "../batch.cjs";
4
+ import type { Cache } from "../cache/core/cache.cjs";
4
5
  import { entityKind } from "../entity.cjs";
5
6
  import type { Logger } from "../logger.cjs";
6
7
  import { PgDatabase } from "../pg-core/db.cjs";
@@ -10,6 +11,7 @@ import { type DrizzleConfig } from "../utils.cjs";
10
11
  import { type NeonHttpClient, type NeonHttpQueryResultHKT, NeonHttpSession } from "./session.cjs";
11
12
  export interface NeonDriverOptions {
12
13
  logger?: Logger;
14
+ cache?: Cache;
13
15
  }
14
16
  export declare class NeonHttpDriver {
15
17
  private client;
@@ -1,6 +1,7 @@
1
1
  import type { HTTPQueryOptions, HTTPTransactionOptions, NeonQueryFunction } from '@neondatabase/serverless';
2
2
  import * as V1 from "../_relations.js";
3
3
  import type { BatchItem, BatchResponse } from "../batch.js";
4
+ import type { Cache } from "../cache/core/cache.js";
4
5
  import { entityKind } from "../entity.js";
5
6
  import type { Logger } from "../logger.js";
6
7
  import { PgDatabase } from "../pg-core/db.js";
@@ -10,6 +11,7 @@ import { type DrizzleConfig } from "../utils.js";
10
11
  import { type NeonHttpClient, type NeonHttpQueryResultHKT, NeonHttpSession } from "./session.js";
11
12
  export interface NeonDriverOptions {
12
13
  logger?: Logger;
14
+ cache?: Cache;
13
15
  }
14
16
  export declare class NeonHttpDriver {
15
17
  private client;
@@ -16,7 +16,8 @@ class NeonHttpDriver {
16
16
  static [entityKind] = "NeonHttpDriver";
17
17
  createSession(relations, schema) {
18
18
  return new NeonHttpSession(this.client, this.dialect, relations ?? {}, schema, {
19
- logger: this.options.logger
19
+ logger: this.options.logger,
20
+ cache: this.options.cache
20
21
  });
21
22
  }
22
23
  initMappers() {
@@ -35,12 +36,9 @@ function wrap(target, token, cb, deep) {
35
36
  return new Proxy(target, {
36
37
  get(target2, p) {
37
38
  const element = target2[p];
38
- if (typeof element !== "function" && (typeof element !== "object" || element === null))
39
- return element;
40
- if (deep)
41
- return wrap(element, token, cb);
42
- if (p === "query" || p === "_query")
43
- return wrap(element, token, cb, true);
39
+ if (typeof element !== "function" && (typeof element !== "object" || element === null)) return element;
40
+ if (deep) return wrap(element, token, cb);
41
+ if (p === "query" || p === "_query") return wrap(element, token, cb, true);
44
42
  return new Proxy(element, {
45
43
  apply(target3, thisArg, argArray) {
46
44
  const res = target3.call(thisArg, ...argArray);
@@ -89,7 +87,7 @@ function construct(client, config = {}) {
89
87
  };
90
88
  }
91
89
  const relations = config.relations;
92
- const driver = new NeonHttpDriver(client, dialect, { logger });
90
+ const driver = new NeonHttpDriver(client, dialect, { logger, cache: config.cache });
93
91
  const session = driver.createSession(relations, schema);
94
92
  const db = new NeonHttpDatabase(
95
93
  dialect,
@@ -98,6 +96,10 @@ function construct(client, config = {}) {
98
96
  schema
99
97
  );
100
98
  db.$client = client;
99
+ db.$cache = config.cache;
100
+ if (db.$cache) {
101
+ db.$cache["invalidate"] = config.cache?.onMutate;
102
+ }
101
103
  return db;
102
104
  }
103
105
  function drizzle(...params) {
@@ -107,8 +109,7 @@ function drizzle(...params) {
107
109
  }
108
110
  if (isConfig(params[0])) {
109
111
  const { connection, client, ...drizzleConfig } = params[0];
110
- if (client)
111
- return construct(client, drizzleConfig);
112
+ if (client) return construct(client, drizzleConfig);
112
113
  if (typeof connection === "object") {
113
114
  const { connectionString, ...options } = connection;
114
115
  const instance2 = neon(connectionString, options);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/neon-http/driver.ts"],"sourcesContent":["import type { HTTPQueryOptions, HTTPTransactionOptions, NeonQueryFunction } from '@neondatabase/serverless';\nimport { neon, types } from '@neondatabase/serverless';\nimport * as V1 from '~/_relations.ts';\nimport type { BatchItem, BatchResponse } from '~/batch.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { PgDatabase } from '~/pg-core/db.ts';\nimport { PgDialect } from '~/pg-core/dialect.ts';\nimport type {\n\tAnyRelations,\n\tEmptyRelations,\n\tExtractTablesWithRelations,\n\tRelations,\n\tTablesRelationalConfig,\n} from '~/relations.ts';\nimport { type DrizzleConfig, isConfig } from '~/utils.ts';\nimport { type NeonHttpClient, type NeonHttpQueryResultHKT, NeonHttpSession } from './session.ts';\n\nexport interface NeonDriverOptions {\n\tlogger?: Logger;\n}\n\nexport class NeonHttpDriver {\n\tstatic readonly [entityKind]: string = 'NeonHttpDriver';\n\n\tconstructor(\n\t\tprivate client: NeonHttpClient,\n\t\tprivate dialect: PgDialect,\n\t\tprivate options: NeonDriverOptions = {},\n\t) {\n\t\tthis.initMappers();\n\t}\n\n\tcreateSession(\n\t\trelations: Relations | undefined,\n\t\tschema: V1.RelationalSchemaConfig<V1.TablesRelationalConfig> | undefined,\n\t): NeonHttpSession<Record<string, unknown>, EmptyRelations, TablesRelationalConfig, V1.TablesRelationalConfig> {\n\t\treturn new NeonHttpSession(this.client, this.dialect, relations ?? {} as EmptyRelations, schema, {\n\t\t\tlogger: this.options.logger,\n\t\t});\n\t}\n\n\tinitMappers() {\n\t\ttypes.setTypeParser(types.builtins.TIMESTAMPTZ, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.TIMESTAMP, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.DATE, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.INTERVAL, (val) => val);\n\t\ttypes.setTypeParser(1231, (val) => val);\n\t\ttypes.setTypeParser(1115, (val) => val);\n\t\ttypes.setTypeParser(1185, (val) => val);\n\t\ttypes.setTypeParser(1187, (val) => val);\n\t\ttypes.setTypeParser(1182, (val) => val);\n\t}\n}\n\nfunction wrap<T extends object>(\n\ttarget: T,\n\ttoken: Exclude<HTTPQueryOptions<true, true>['authToken'], undefined>,\n\tcb: (target: any, p: string | symbol, res: any) => any,\n\tdeep?: boolean,\n) {\n\treturn new Proxy(target, {\n\t\tget(target, p) {\n\t\t\tconst element = target[p as keyof typeof p];\n\t\t\tif (typeof element !== 'function' && (typeof element !== 'object' || element === null)) return element;\n\n\t\t\tif (deep) return wrap(element, token, cb);\n\t\t\tif (p === 'query' || p === '_query') return wrap(element, token, cb, true);\n\n\t\t\treturn new Proxy(element as any, {\n\t\t\t\tapply(target, thisArg, argArray) {\n\t\t\t\t\tconst res = target.call(thisArg, ...argArray);\n\t\t\t\t\tif (typeof res === 'object' && res !== null && 'setToken' in res && typeof res.setToken === 'function') {\n\t\t\t\t\t\tres.setToken(token);\n\t\t\t\t\t}\n\t\t\t\t\treturn cb(target, p, res);\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t});\n}\n\nexport class NeonHttpDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n> extends PgDatabase<NeonHttpQueryResultHKT, TSchema, TRelations> {\n\tstatic override readonly [entityKind]: string = 'NeonHttpDatabase';\n\n\t$withAuth(\n\t\ttoken: Exclude<HTTPQueryOptions<true, true>['authToken'], undefined>,\n\t): Omit<\n\t\tthis,\n\t\tExclude<\n\t\t\tkeyof this,\n\t\t\t| '$count'\n\t\t\t| 'delete'\n\t\t\t| 'select'\n\t\t\t| 'selectDistinct'\n\t\t\t| 'selectDistinctOn'\n\t\t\t| 'update'\n\t\t\t| 'insert'\n\t\t\t| 'with'\n\t\t\t| '_query'\n\t\t\t| 'query'\n\t\t\t| 'execute'\n\t\t\t| 'refreshMaterializedView'\n\t\t>\n\t> {\n\t\tthis.authToken = token;\n\n\t\treturn wrap(this, token, (target, p, res) => {\n\t\t\tif (p === 'with') {\n\t\t\t\treturn wrap(res, token, (_, __, res) => res);\n\t\t\t}\n\t\t\treturn res;\n\t\t});\n\t}\n\n\t/** @internal */\n\tdeclare readonly session: NeonHttpSession<\n\t\tTSchema,\n\t\tTRelations,\n\t\tExtractTablesWithRelations<TRelations>,\n\t\tV1.ExtractTablesWithRelations<TSchema>\n\t>;\n\n\tasync batch<U extends BatchItem<'pg'>, T extends Readonly<[U, ...U[]]>>(\n\t\tbatch: T,\n\t): Promise<BatchResponse<T>> {\n\t\treturn this.session.batch(batch) as Promise<BatchResponse<T>>;\n\t}\n}\n\nfunction construct<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n\tTClient extends NeonQueryFunction<any, any> = NeonQueryFunction<any, any>,\n>(\n\tclient: TClient,\n\tconfig: DrizzleConfig<TSchema, TRelations> = {},\n): NeonHttpDatabase<TSchema, TRelations> & {\n\t$client: TClient;\n} {\n\tconst dialect = new PgDialect({ casing: config.casing });\n\tlet logger;\n\tif (config.logger === true) {\n\t\tlogger = new DefaultLogger();\n\t} else if (config.logger !== false) {\n\t\tlogger = config.logger;\n\t}\n\n\tlet schema: V1.RelationalSchemaConfig<V1.TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tconst tablesConfig = V1.extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tV1.createTableRelationsHelpers,\n\t\t);\n\t\tschema = {\n\t\t\tfullSchema: config.schema,\n\t\t\tschema: tablesConfig.tables,\n\t\t\ttableNamesMap: tablesConfig.tableNamesMap,\n\t\t};\n\t}\n\n\tconst relations = config.relations;\n\n\tconst driver = new NeonHttpDriver(client, dialect, { logger });\n\tconst session = driver.createSession(relations, schema);\n\n\tconst db = new NeonHttpDatabase(\n\t\tdialect,\n\t\tsession,\n\t\trelations,\n\t\tschema as V1.RelationalSchemaConfig<V1.ExtractTablesWithRelations<TSchema>> | undefined,\n\t);\n\t(<any> db).$client = client;\n\n\treturn db as any;\n}\n\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n\tTClient extends NeonQueryFunction<any, any> = NeonQueryFunction<false, false>,\n>(\n\t...params: [\n\t\tTClient | string,\n\t] | [\n\t\tTClient | string,\n\t\tDrizzleConfig<TSchema, TRelations>,\n\t] | [\n\t\t(\n\t\t\t& DrizzleConfig<TSchema, TRelations>\n\t\t\t& ({\n\t\t\t\tconnection: string | ({ connectionString: string } & HTTPTransactionOptions<boolean, boolean>);\n\t\t\t} | {\n\t\t\t\tclient: TClient;\n\t\t\t})\n\t\t),\n\t]\n): NeonHttpDatabase<TSchema, TRelations> & {\n\t$client: TClient;\n} {\n\tif (typeof params[0] === 'string') {\n\t\tconst instance = neon(params[0] as string);\n\t\treturn construct(instance, params[1]) as any;\n\t}\n\n\tif (isConfig(params[0])) {\n\t\tconst { connection, client, ...drizzleConfig } = params[0] as\n\t\t\t& {\n\t\t\t\tconnection?:\n\t\t\t\t\t| ({\n\t\t\t\t\t\tconnectionString: string;\n\t\t\t\t\t} & HTTPTransactionOptions<boolean, boolean>)\n\t\t\t\t\t| string;\n\t\t\t\tclient?: TClient;\n\t\t\t}\n\t\t\t& DrizzleConfig<TSchema, TRelations>;\n\n\t\tif (client) return construct(client, drizzleConfig);\n\n\t\tif (typeof connection === 'object') {\n\t\t\tconst { connectionString, ...options } = connection;\n\n\t\t\tconst instance = neon(connectionString, options);\n\n\t\t\treturn construct(instance, drizzleConfig) as any;\n\t\t}\n\n\t\tconst instance = neon(connection!);\n\n\t\treturn construct(instance, drizzleConfig) as any;\n\t}\n\n\treturn construct(params[0] as TClient, params[1] as DrizzleConfig<TSchema, TRelations> | undefined) as any;\n}\n\nexport namespace drizzle {\n\texport function mock<\n\t\tTSchema extends Record<string, unknown> = Record<string, never>,\n\t\tTRelations extends AnyRelations = EmptyRelations,\n\t>(\n\t\tconfig?: DrizzleConfig<TSchema, TRelations>,\n\t): NeonHttpDatabase<TSchema, TRelations> & {\n\t\t$client: '$client is not available on drizzle.mock()';\n\t} {\n\t\treturn construct({} as any, config) as any;\n\t}\n}\n"],"mappings":"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","names":["target","res","instance","drizzle"]}
1
+ {"version":3,"sources":["../../src/neon-http/driver.ts"],"sourcesContent":["import type { HTTPQueryOptions, HTTPTransactionOptions, NeonQueryFunction } from '@neondatabase/serverless';\nimport { neon, types } from '@neondatabase/serverless';\nimport * as V1 from '~/_relations.ts';\nimport type { BatchItem, BatchResponse } from '~/batch.ts';\nimport type { Cache } from '~/cache/core/cache.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { PgDatabase } from '~/pg-core/db.ts';\nimport { PgDialect } from '~/pg-core/dialect.ts';\nimport type {\n\tAnyRelations,\n\tEmptyRelations,\n\tExtractTablesWithRelations,\n\tRelations,\n\tTablesRelationalConfig,\n} from '~/relations.ts';\nimport { type DrizzleConfig, isConfig } from '~/utils.ts';\nimport { type NeonHttpClient, type NeonHttpQueryResultHKT, NeonHttpSession } from './session.ts';\n\nexport interface NeonDriverOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n}\n\nexport class NeonHttpDriver {\n\tstatic readonly [entityKind]: string = 'NeonHttpDriver';\n\n\tconstructor(\n\t\tprivate client: NeonHttpClient,\n\t\tprivate dialect: PgDialect,\n\t\tprivate options: NeonDriverOptions = {},\n\t) {\n\t\tthis.initMappers();\n\t}\n\n\tcreateSession(\n\t\trelations: Relations | undefined,\n\t\tschema: V1.RelationalSchemaConfig<V1.TablesRelationalConfig> | undefined,\n\t): NeonHttpSession<Record<string, unknown>, EmptyRelations, TablesRelationalConfig, V1.TablesRelationalConfig> {\n\t\treturn new NeonHttpSession(this.client, this.dialect, relations ?? {} as EmptyRelations, schema, {\n\t\t\tlogger: this.options.logger,\n\t\t\tcache: this.options.cache,\n\t\t});\n\t}\n\n\tinitMappers() {\n\t\ttypes.setTypeParser(types.builtins.TIMESTAMPTZ, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.TIMESTAMP, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.DATE, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.INTERVAL, (val) => val);\n\t\ttypes.setTypeParser(1231, (val) => val);\n\t\ttypes.setTypeParser(1115, (val) => val);\n\t\ttypes.setTypeParser(1185, (val) => val);\n\t\ttypes.setTypeParser(1187, (val) => val);\n\t\ttypes.setTypeParser(1182, (val) => val);\n\t}\n}\n\nfunction wrap<T extends object>(\n\ttarget: T,\n\ttoken: Exclude<HTTPQueryOptions<true, true>['authToken'], undefined>,\n\tcb: (target: any, p: string | symbol, res: any) => any,\n\tdeep?: boolean,\n) {\n\treturn new Proxy(target, {\n\t\tget(target, p) {\n\t\t\tconst element = target[p as keyof typeof p];\n\t\t\tif (typeof element !== 'function' && (typeof element !== 'object' || element === null)) return element;\n\n\t\t\tif (deep) return wrap(element, token, cb);\n\t\t\tif (p === 'query' || p === '_query') return wrap(element, token, cb, true);\n\n\t\t\treturn new Proxy(element as any, {\n\t\t\t\tapply(target, thisArg, argArray) {\n\t\t\t\t\tconst res = target.call(thisArg, ...argArray);\n\t\t\t\t\tif (typeof res === 'object' && res !== null && 'setToken' in res && typeof res.setToken === 'function') {\n\t\t\t\t\t\tres.setToken(token);\n\t\t\t\t\t}\n\t\t\t\t\treturn cb(target, p, res);\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t});\n}\n\nexport class NeonHttpDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n> extends PgDatabase<NeonHttpQueryResultHKT, TSchema, TRelations> {\n\tstatic override readonly [entityKind]: string = 'NeonHttpDatabase';\n\n\t$withAuth(\n\t\ttoken: Exclude<HTTPQueryOptions<true, true>['authToken'], undefined>,\n\t): Omit<\n\t\tthis,\n\t\tExclude<\n\t\t\tkeyof this,\n\t\t\t| '$count'\n\t\t\t| 'delete'\n\t\t\t| 'select'\n\t\t\t| 'selectDistinct'\n\t\t\t| 'selectDistinctOn'\n\t\t\t| 'update'\n\t\t\t| 'insert'\n\t\t\t| 'with'\n\t\t\t| '_query'\n\t\t\t| 'query'\n\t\t\t| 'execute'\n\t\t\t| 'refreshMaterializedView'\n\t\t>\n\t> {\n\t\tthis.authToken = token;\n\n\t\treturn wrap(this, token, (target, p, res) => {\n\t\t\tif (p === 'with') {\n\t\t\t\treturn wrap(res, token, (_, __, res) => res);\n\t\t\t}\n\t\t\treturn res;\n\t\t});\n\t}\n\n\t/** @internal */\n\tdeclare readonly session: NeonHttpSession<\n\t\tTSchema,\n\t\tTRelations,\n\t\tExtractTablesWithRelations<TRelations>,\n\t\tV1.ExtractTablesWithRelations<TSchema>\n\t>;\n\n\tasync batch<U extends BatchItem<'pg'>, T extends Readonly<[U, ...U[]]>>(\n\t\tbatch: T,\n\t): Promise<BatchResponse<T>> {\n\t\treturn this.session.batch(batch) as Promise<BatchResponse<T>>;\n\t}\n}\n\nfunction construct<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n\tTClient extends NeonQueryFunction<any, any> = NeonQueryFunction<any, any>,\n>(\n\tclient: TClient,\n\tconfig: DrizzleConfig<TSchema, TRelations> = {},\n): NeonHttpDatabase<TSchema, TRelations> & {\n\t$client: TClient;\n} {\n\tconst dialect = new PgDialect({ casing: config.casing });\n\tlet logger;\n\tif (config.logger === true) {\n\t\tlogger = new DefaultLogger();\n\t} else if (config.logger !== false) {\n\t\tlogger = config.logger;\n\t}\n\n\tlet schema: V1.RelationalSchemaConfig<V1.TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tconst tablesConfig = V1.extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tV1.createTableRelationsHelpers,\n\t\t);\n\t\tschema = {\n\t\t\tfullSchema: config.schema,\n\t\t\tschema: tablesConfig.tables,\n\t\t\ttableNamesMap: tablesConfig.tableNamesMap,\n\t\t};\n\t}\n\n\tconst relations = config.relations;\n\n\tconst driver = new NeonHttpDriver(client, dialect, { logger, cache: config.cache });\n\tconst session = driver.createSession(relations, schema);\n\n\tconst db = new NeonHttpDatabase(\n\t\tdialect,\n\t\tsession,\n\t\trelations,\n\t\tschema as V1.RelationalSchemaConfig<V1.ExtractTablesWithRelations<TSchema>> | undefined,\n\t);\n\t(<any> db).$client = client;\n\t(<any> db).$cache = config.cache;\n\tif ((<any> db).$cache) {\n\t\t(<any> db).$cache['invalidate'] = config.cache?.onMutate;\n\t}\n\n\treturn db as any;\n}\n\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n\tTClient extends NeonQueryFunction<any, any> = NeonQueryFunction<false, false>,\n>(\n\t...params: [\n\t\tTClient | string,\n\t] | [\n\t\tTClient | string,\n\t\tDrizzleConfig<TSchema, TRelations>,\n\t] | [\n\t\t(\n\t\t\t& DrizzleConfig<TSchema, TRelations>\n\t\t\t& ({\n\t\t\t\tconnection: string | ({ connectionString: string } & HTTPTransactionOptions<boolean, boolean>);\n\t\t\t} | {\n\t\t\t\tclient: TClient;\n\t\t\t})\n\t\t),\n\t]\n): NeonHttpDatabase<TSchema, TRelations> & {\n\t$client: TClient;\n} {\n\tif (typeof params[0] === 'string') {\n\t\tconst instance = neon(params[0] as string);\n\t\treturn construct(instance, params[1]) as any;\n\t}\n\n\tif (isConfig(params[0])) {\n\t\tconst { connection, client, ...drizzleConfig } = params[0] as\n\t\t\t& {\n\t\t\t\tconnection?:\n\t\t\t\t\t| ({\n\t\t\t\t\t\tconnectionString: string;\n\t\t\t\t\t} & HTTPTransactionOptions<boolean, boolean>)\n\t\t\t\t\t| string;\n\t\t\t\tclient?: TClient;\n\t\t\t}\n\t\t\t& DrizzleConfig<TSchema, TRelations>;\n\n\t\tif (client) return construct(client, drizzleConfig);\n\n\t\tif (typeof connection === 'object') {\n\t\t\tconst { connectionString, ...options } = connection;\n\n\t\t\tconst instance = neon(connectionString, options);\n\n\t\t\treturn construct(instance, drizzleConfig) as any;\n\t\t}\n\n\t\tconst instance = neon(connection!);\n\n\t\treturn construct(instance, drizzleConfig) as any;\n\t}\n\n\treturn construct(params[0] as TClient, params[1] as DrizzleConfig<TSchema, TRelations> | undefined) as any;\n}\n\nexport namespace drizzle {\n\texport function mock<\n\t\tTSchema extends Record<string, unknown> = Record<string, never>,\n\t\tTRelations extends AnyRelations = EmptyRelations,\n\t>(\n\t\tconfig?: DrizzleConfig<TSchema, TRelations>,\n\t): NeonHttpDatabase<TSchema, TRelations> & {\n\t\t$client: '$client is not available on drizzle.mock()';\n\t} {\n\t\treturn construct({} as any, config) as any;\n\t}\n}\n"],"mappings":"AACA,SAAS,MAAM,aAAa;AAC5B,YAAY,QAAQ;AAGpB,SAAS,kBAAkB;AAE3B,SAAS,qBAAqB;AAC9B,SAAS,kBAAkB;AAC3B,SAAS,iBAAiB;AAQ1B,SAA6B,gBAAgB;AAC7C,SAA2D,uBAAuB;AAO3E,MAAM,eAAe;AAAA,EAG3B,YACS,QACA,SACA,UAA6B,CAAC,GACrC;AAHO;AACA;AACA;AAER,SAAK,YAAY;AAAA,EAClB;AAAA,EARA,QAAiB,UAAU,IAAY;AAAA,EAUvC,cACC,WACA,QAC8G;AAC9G,WAAO,IAAI,gBAAgB,KAAK,QAAQ,KAAK,SAAS,aAAa,CAAC,GAAqB,QAAQ;AAAA,MAChG,QAAQ,KAAK,QAAQ;AAAA,MACrB,OAAO,KAAK,QAAQ;AAAA,IACrB,CAAC;AAAA,EACF;AAAA,EAEA,cAAc;AACb,UAAM,cAAc,MAAM,SAAS,aAAa,CAAC,QAAQ,GAAG;AAC5D,UAAM,cAAc,MAAM,SAAS,WAAW,CAAC,QAAQ,GAAG;AAC1D,UAAM,cAAc,MAAM,SAAS,MAAM,CAAC,QAAQ,GAAG;AACrD,UAAM,cAAc,MAAM,SAAS,UAAU,CAAC,QAAQ,GAAG;AACzD,UAAM,cAAc,MAAM,CAAC,QAAQ,GAAG;AACtC,UAAM,cAAc,MAAM,CAAC,QAAQ,GAAG;AACtC,UAAM,cAAc,MAAM,CAAC,QAAQ,GAAG;AACtC,UAAM,cAAc,MAAM,CAAC,QAAQ,GAAG;AACtC,UAAM,cAAc,MAAM,CAAC,QAAQ,GAAG;AAAA,EACvC;AACD;AAEA,SAAS,KACR,QACA,OACA,IACA,MACC;AACD,SAAO,IAAI,MAAM,QAAQ;AAAA,IACxB,IAAIA,SAAQ,GAAG;AACd,YAAM,UAAUA,QAAO,CAAmB;AAC1C,UAAI,OAAO,YAAY,eAAe,OAAO,YAAY,YAAY,YAAY,MAAO,QAAO;AAE/F,UAAI,KAAM,QAAO,KAAK,SAAS,OAAO,EAAE;AACxC,UAAI,MAAM,WAAW,MAAM,SAAU,QAAO,KAAK,SAAS,OAAO,IAAI,IAAI;AAEzE,aAAO,IAAI,MAAM,SAAgB;AAAA,QAChC,MAAMA,SAAQ,SAAS,UAAU;AAChC,gBAAM,MAAMA,QAAO,KAAK,SAAS,GAAG,QAAQ;AAC5C,cAAI,OAAO,QAAQ,YAAY,QAAQ,QAAQ,cAAc,OAAO,OAAO,IAAI,aAAa,YAAY;AACvG,gBAAI,SAAS,KAAK;AAAA,UACnB;AACA,iBAAO,GAAGA,SAAQ,GAAG,GAAG;AAAA,QACzB;AAAA,MACD,CAAC;AAAA,IACF;AAAA,EACD,CAAC;AACF;AAEO,MAAM,yBAGH,WAAwD;AAAA,EACjE,QAA0B,UAAU,IAAY;AAAA,EAEhD,UACC,OAkBC;AACD,SAAK,YAAY;AAEjB,WAAO,KAAK,MAAM,OAAO,CAAC,QAAQ,GAAG,QAAQ;AAC5C,UAAI,MAAM,QAAQ;AACjB,eAAO,KAAK,KAAK,OAAO,CAAC,GAAG,IAAIC,SAAQA,IAAG;AAAA,MAC5C;AACA,aAAO;AAAA,IACR,CAAC;AAAA,EACF;AAAA,EAUA,MAAM,MACL,OAC4B;AAC5B,WAAO,KAAK,QAAQ,MAAM,KAAK;AAAA,EAChC;AACD;AAEA,SAAS,UAKR,QACA,SAA6C,CAAC,GAG7C;AACD,QAAM,UAAU,IAAI,UAAU,EAAE,QAAQ,OAAO,OAAO,CAAC;AACvD,MAAI;AACJ,MAAI,OAAO,WAAW,MAAM;AAC3B,aAAS,IAAI,cAAc;AAAA,EAC5B,WAAW,OAAO,WAAW,OAAO;AACnC,aAAS,OAAO;AAAA,EACjB;AAEA,MAAI;AACJ,MAAI,OAAO,QAAQ;AAClB,UAAM,eAAe,GAAG;AAAA,MACvB,OAAO;AAAA,MACP,GAAG;AAAA,IACJ;AACA,aAAS;AAAA,MACR,YAAY,OAAO;AAAA,MACnB,QAAQ,aAAa;AAAA,MACrB,eAAe,aAAa;AAAA,IAC7B;AAAA,EACD;AAEA,QAAM,YAAY,OAAO;AAEzB,QAAM,SAAS,IAAI,eAAe,QAAQ,SAAS,EAAE,QAAQ,OAAO,OAAO,MAAM,CAAC;AAClF,QAAM,UAAU,OAAO,cAAc,WAAW,MAAM;AAEtD,QAAM,KAAK,IAAI;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACA,EAAO,GAAI,UAAU;AACrB,EAAO,GAAI,SAAS,OAAO;AAC3B,MAAW,GAAI,QAAQ;AACtB,IAAO,GAAI,OAAO,YAAY,IAAI,OAAO,OAAO;AAAA,EACjD;AAEA,SAAO;AACR;AAEO,SAAS,WAKZ,QAiBF;AACD,MAAI,OAAO,OAAO,CAAC,MAAM,UAAU;AAClC,UAAM,WAAW,KAAK,OAAO,CAAC,CAAW;AACzC,WAAO,UAAU,UAAU,OAAO,CAAC,CAAC;AAAA,EACrC;AAEA,MAAI,SAAS,OAAO,CAAC,CAAC,GAAG;AACxB,UAAM,EAAE,YAAY,QAAQ,GAAG,cAAc,IAAI,OAAO,CAAC;AAWzD,QAAI,OAAQ,QAAO,UAAU,QAAQ,aAAa;AAElD,QAAI,OAAO,eAAe,UAAU;AACnC,YAAM,EAAE,kBAAkB,GAAG,QAAQ,IAAI;AAEzC,YAAMC,YAAW,KAAK,kBAAkB,OAAO;AAE/C,aAAO,UAAUA,WAAU,aAAa;AAAA,IACzC;AAEA,UAAM,WAAW,KAAK,UAAW;AAEjC,WAAO,UAAU,UAAU,aAAa;AAAA,EACzC;AAEA,SAAO,UAAU,OAAO,CAAC,GAAc,OAAO,CAAC,CAAmD;AACnG;AAAA,CAEO,CAAUC,aAAV;AACC,WAAS,KAIf,QAGC;AACD,WAAO,UAAU,CAAC,GAAU,MAAM;AAAA,EACnC;AATO,EAAAA,SAAS;AAAA,GADA;","names":["target","res","instance","drizzle"]}