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
@@ -23,6 +23,7 @@ __export(session_exports, {
23
23
  NeonTransaction: () => NeonTransaction
24
24
  });
25
25
  module.exports = __toCommonJS(session_exports);
26
+ var import_core = require("../cache/core/index.cjs");
26
27
  var import_entity = require("../entity.cjs");
27
28
  var import_logger = require("../logger.cjs");
28
29
  var import_pg_core = require("../pg-core/index.cjs");
@@ -38,8 +39,8 @@ const queryConfig = {
38
39
  fullResults: true
39
40
  };
40
41
  class NeonHttpPreparedQuery extends import_session.PgPreparedQuery {
41
- constructor(client, query, logger, fields, _isResponseInArrayMode, customResultMapper, isRqbV2Query) {
42
- super(query);
42
+ constructor(client, query, logger, cache, queryMetadata, cacheConfig, fields, _isResponseInArrayMode, customResultMapper, isRqbV2Query) {
43
+ super(query, cache, queryMetadata, cacheConfig);
43
44
  this.client = client;
44
45
  this.logger = logger;
45
46
  this.fields = fields;
@@ -52,36 +53,39 @@ class NeonHttpPreparedQuery extends import_session.PgPreparedQuery {
52
53
  clientQuery;
53
54
  /** @internal */
54
55
  async execute(placeholderValues = {}, token = this.authToken) {
55
- if (this.isRqbV2Query)
56
- return this.executeRqbV2(placeholderValues, token);
56
+ if (this.isRqbV2Query) return this.executeRqbV2(placeholderValues, token);
57
57
  const params = (0, import_sql.fillPlaceholders)(this.query.params, placeholderValues);
58
58
  this.logger.logQuery(this.query.sql, params);
59
59
  const { fields, clientQuery, query, customResultMapper } = this;
60
60
  if (!fields && !customResultMapper) {
61
- return clientQuery(
61
+ return this.queryWithCache(query.sql, params, async () => {
62
+ return clientQuery(
63
+ query.sql,
64
+ params,
65
+ token === void 0 ? rawQueryConfig : {
66
+ ...rawQueryConfig,
67
+ authToken: token
68
+ }
69
+ );
70
+ });
71
+ }
72
+ const result = await this.queryWithCache(query.sql, params, async () => {
73
+ return await clientQuery(
62
74
  query.sql,
63
75
  params,
64
- token === void 0 ? rawQueryConfig : {
65
- ...rawQueryConfig,
76
+ token === void 0 ? queryConfig : {
77
+ ...queryConfig,
66
78
  authToken: token
67
79
  }
68
80
  );
69
- }
70
- const result = await clientQuery(
71
- query.sql,
72
- params,
73
- token === void 0 ? queryConfig : {
74
- ...queryConfig,
75
- authToken: token
76
- }
77
- );
81
+ });
78
82
  return this.mapResult(result);
79
83
  }
80
84
  async executeRqbV2(placeholderValues, token) {
81
85
  const params = (0, import_sql.fillPlaceholders)(this.query.params, placeholderValues);
82
86
  this.logger.logQuery(this.query.sql, params);
83
- const { client, query, customResultMapper } = this;
84
- const result = await client(
87
+ const { clientQuery, query, customResultMapper } = this;
88
+ const result = await clientQuery(
85
89
  query.sql,
86
90
  params,
87
91
  token === void 0 ? rawQueryConfig : {
@@ -134,15 +138,20 @@ class NeonHttpSession extends import_session.PgSession {
134
138
  this.options = options;
135
139
  this.clientQuery = client.query ?? client;
136
140
  this.logger = options.logger ?? new import_logger.NoopLogger();
141
+ this.cache = options.cache ?? new import_core.NoopCache();
137
142
  }
138
143
  static [import_entity.entityKind] = "NeonHttpSession";
139
144
  clientQuery;
140
145
  logger;
141
- prepareQuery(query, fields, name, isResponseInArrayMode, customResultMapper) {
146
+ cache;
147
+ prepareQuery(query, fields, name, isResponseInArrayMode, customResultMapper, queryMetadata, cacheConfig) {
142
148
  return new NeonHttpPreparedQuery(
143
149
  this.client,
144
150
  query,
145
151
  this.logger,
152
+ this.cache,
153
+ queryMetadata,
154
+ cacheConfig,
146
155
  fields,
147
156
  isResponseInArrayMode,
148
157
  customResultMapper
@@ -153,6 +162,9 @@ class NeonHttpSession extends import_session.PgSession {
153
162
  this.client,
154
163
  query,
155
164
  this.logger,
165
+ this.cache,
166
+ void 0,
167
+ void 0,
156
168
  fields,
157
169
  false,
158
170
  customResultMapper,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/neon-http/session.ts"],"sourcesContent":["import type { FullQueryResults, NeonQueryFunction, NeonQueryPromise } from '@neondatabase/serverless';\nimport type * as V1 from '~/_relations.ts';\nimport type { BatchItem } from '~/batch.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { PgDialect } from '~/pg-core/dialect.ts';\nimport { PgTransaction } from '~/pg-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/pg-core/query-builders/select.types.ts';\nimport type { PgQueryResultHKT, PgTransactionConfig, PreparedQueryConfig } from '~/pg-core/session.ts';\nimport { PgPreparedQuery as PgPreparedQuery, PgSession } from '~/pg-core/session.ts';\nimport type { AnyRelations, TablesRelationalConfig } from '~/relations.ts';\nimport type { PreparedQuery } from '~/session.ts';\nimport { fillPlaceholders, type Query, type SQL } from '~/sql/sql.ts';\nimport { mapResultRow, type NeonAuthToken } from '~/utils.ts';\n\nexport type NeonHttpClient = NeonQueryFunction<any, any>;\n\nconst rawQueryConfig = {\n\tarrayMode: false,\n\tfullResults: true,\n} as const;\nconst queryConfig = {\n\tarrayMode: true,\n\tfullResults: true,\n} as const;\n\nexport class NeonHttpPreparedQuery<\n\tT extends PreparedQueryConfig,\n\tTIsRqbV2 extends boolean = false,\n> extends PgPreparedQuery<T> {\n\tstatic override readonly [entityKind]: string = 'NeonHttpPreparedQuery';\n\tprivate clientQuery: (sql: string, params: any[], opts: Record<string, any>) => NeonQueryPromise<any, any>;\n\n\tconstructor(\n\t\tprivate client: NeonHttpClient,\n\t\tquery: Query,\n\t\tprivate logger: Logger,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\tprivate _isResponseInArrayMode: boolean,\n\t\tprivate customResultMapper?: (\n\t\t\trows: TIsRqbV2 extends true ? Record<string, unknown>[] : unknown[][],\n\t\t) => T['execute'],\n\t\tprivate isRqbV2Query?: TIsRqbV2,\n\t) {\n\t\tsuper(query);\n\t\t// `client.query` is for @neondatabase/serverless v1.0.0 and up, where the\n\t\t// root query function `client` is only usable as a template function;\n\t\t// `client` is a fallback for earlier versions\n\t\tthis.clientQuery = (client as any).query ?? client as any;\n\t}\n\n\tasync execute(placeholderValues: Record<string, unknown> | undefined): Promise<T['execute']>;\n\t/** @internal */\n\tasync execute(placeholderValues: Record<string, unknown> | undefined, token?: NeonAuthToken): Promise<T['execute']>;\n\t/** @internal */\n\tasync execute(\n\t\tplaceholderValues: Record<string, unknown> | undefined = {},\n\t\ttoken: NeonAuthToken | undefined = this.authToken,\n\t): Promise<T['execute']> {\n\t\tif (this.isRqbV2Query) return this.executeRqbV2(placeholderValues, token);\n\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues);\n\n\t\tthis.logger.logQuery(this.query.sql, params);\n\n\t\tconst { fields, clientQuery, query, customResultMapper } = this;\n\n\t\tif (!fields && !customResultMapper) {\n\t\t\treturn clientQuery(\n\t\t\t\tquery.sql,\n\t\t\t\tparams,\n\t\t\t\ttoken === undefined\n\t\t\t\t\t? rawQueryConfig\n\t\t\t\t\t: {\n\t\t\t\t\t\t...rawQueryConfig,\n\t\t\t\t\t\tauthToken: token,\n\t\t\t\t\t},\n\t\t\t);\n\t\t}\n\n\t\tconst result = await clientQuery(\n\t\t\tquery.sql,\n\t\t\tparams,\n\t\t\ttoken === undefined\n\t\t\t\t? queryConfig\n\t\t\t\t: {\n\t\t\t\t\t...queryConfig,\n\t\t\t\t\tauthToken: token,\n\t\t\t\t},\n\t\t);\n\n\t\treturn this.mapResult(result);\n\t}\n\n\tprivate async executeRqbV2(\n\t\tplaceholderValues: Record<string, unknown>,\n\t\ttoken: NeonAuthToken | undefined,\n\t): Promise<T['execute']> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues);\n\n\t\tthis.logger.logQuery(this.query.sql, params);\n\n\t\tconst { client, query, customResultMapper } = this;\n\n\t\tconst result = await client(\n\t\t\tquery.sql,\n\t\t\tparams,\n\t\t\ttoken === undefined\n\t\t\t\t? rawQueryConfig\n\t\t\t\t: {\n\t\t\t\t\t...rawQueryConfig,\n\t\t\t\t\tauthToken: token,\n\t\t\t\t},\n\t\t);\n\n\t\tconst rows = (result as FullQueryResults<false>).rows;\n\n\t\treturn (customResultMapper as (rows: Record<string, unknown>[]) => T['execute'])(rows);\n\t}\n\n\toverride mapResult(result: unknown): unknown {\n\t\tif (!this.fields && !this.customResultMapper) {\n\t\t\treturn result;\n\t\t}\n\n\t\tconst rows = (result as FullQueryResults<true>).rows;\n\n\t\tif (this.customResultMapper) {\n\t\t\treturn (this.customResultMapper as (rows: unknown[][]) => T['execute'])(rows);\n\t\t}\n\n\t\treturn rows.map((row) => mapResultRow(this.fields!, row, this.joinsNotNullableMap));\n\t}\n\n\tall(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['all']> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues);\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\treturn this.clientQuery(\n\t\t\tthis.query.sql,\n\t\t\tparams,\n\t\t\tthis.authToken === undefined ? rawQueryConfig : {\n\t\t\t\t...rawQueryConfig,\n\t\t\t\tauthToken: this.authToken,\n\t\t\t},\n\t\t).then((result) => result.rows);\n\t}\n\n\tvalues(placeholderValues: Record<string, unknown> | undefined): Promise<T['values']>;\n\t/** @internal */\n\tvalues(placeholderValues: Record<string, unknown> | undefined, token?: NeonAuthToken): Promise<T['values']>;\n\t/** @internal */\n\tvalues(placeholderValues: Record<string, unknown> | undefined = {}, token?: NeonAuthToken): Promise<T['values']> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues);\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\treturn this.clientQuery(this.query.sql, params, { arrayMode: true, fullResults: true, authToken: token }).then((\n\t\t\tresult,\n\t\t) => result.rows);\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode() {\n\t\treturn this._isResponseInArrayMode;\n\t}\n}\n\nexport interface NeonHttpSessionOptions {\n\tlogger?: Logger;\n}\n\nexport class NeonHttpSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTTablesConfig extends TablesRelationalConfig,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends PgSession<NeonHttpQueryResultHKT, TFullSchema, TRelations, TTablesConfig, TSchema> {\n\tstatic override readonly [entityKind]: string = 'NeonHttpSession';\n\n\tprivate clientQuery: (sql: string, params: any[], opts: Record<string, any>) => NeonQueryPromise<any, any>;\n\tprivate logger: Logger;\n\n\tconstructor(\n\t\tprivate client: NeonHttpClient,\n\t\tdialect: PgDialect,\n\t\tprivate relations: AnyRelations,\n\t\tprivate schema: V1.RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: NeonHttpSessionOptions = {},\n\t) {\n\t\tsuper(dialect);\n\t\t// `client.query` is for @neondatabase/serverless v1.0.0 and up, where the\n\t\t// root query function `client` is only usable as a template function;\n\t\t// `client` is a fallback for earlier versions\n\t\tthis.clientQuery = (client as any).query ?? client as any;\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t}\n\n\tprepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => T['execute'],\n\t): PgPreparedQuery<T> {\n\t\treturn new NeonHttpPreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t);\n\t}\n\n\tprepareRelationalQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tcustomResultMapper: (rows: Record<string, unknown>[]) => T['execute'],\n\t): PgPreparedQuery<T> {\n\t\treturn new NeonHttpPreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\tfalse,\n\t\t\tcustomResultMapper,\n\t\t\ttrue,\n\t\t);\n\t}\n\n\tasync batch<U extends BatchItem<'pg'>, T extends Readonly<[U, ...U[]]>>(\n\t\tqueries: T,\n\t) {\n\t\tconst preparedQueries: PreparedQuery[] = [];\n\t\tconst builtQueries: NeonQueryPromise<any, true>[] = [];\n\t\tfor (const query of queries) {\n\t\t\tconst preparedQuery = query._prepare();\n\t\t\tconst builtQuery = preparedQuery.getQuery();\n\t\t\tpreparedQueries.push(preparedQuery);\n\t\t\tbuiltQueries.push(\n\t\t\t\tthis.clientQuery(builtQuery.sql, builtQuery.params, {\n\t\t\t\t\tfullResults: true,\n\t\t\t\t\tarrayMode: preparedQuery.isResponseInArrayMode(),\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\tconst batchResults = await this.client.transaction(builtQueries, queryConfig);\n\n\t\treturn batchResults.map((result, i) => preparedQueries[i]!.mapResult(result, true)) as any;\n\t}\n\n\t// change return type to QueryRows<true>\n\tasync query(query: string, params: unknown[]): Promise<FullQueryResults<true>> {\n\t\tthis.logger.logQuery(query, params);\n\t\tconst result = await this.clientQuery(query, params, { arrayMode: true, fullResults: true });\n\t\treturn result;\n\t}\n\n\t// change return type to QueryRows<false>\n\tasync queryObjects(\n\t\tquery: string,\n\t\tparams: unknown[],\n\t): Promise<FullQueryResults<false>> {\n\t\treturn this.clientQuery(query, params, { arrayMode: false, fullResults: true });\n\t}\n\n\toverride async count(sql: SQL): Promise<number>;\n\t/** @internal */\n\toverride async count(sql: SQL, token?: NeonAuthToken): Promise<number>;\n\t/** @internal */\n\toverride async count(sql: SQL, token?: NeonAuthToken): Promise<number> {\n\t\tconst res = await this.execute<{ rows: [{ count: string }] }>(sql, token);\n\n\t\treturn Number(\n\t\t\tres['rows'][0]['count'],\n\t\t);\n\t}\n\n\toverride async transaction<T>(\n\t\t_transaction: (tx: NeonTransaction<TFullSchema, TRelations, TTablesConfig, TSchema>) => Promise<T>,\n\t\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t\t_config: PgTransactionConfig = {},\n\t): Promise<T> {\n\t\tthrow new Error('No transactions support in neon-http driver');\n\t}\n}\n\nexport class NeonTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTTablesConfig extends TablesRelationalConfig,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends PgTransaction<NeonHttpQueryResultHKT, TFullSchema, TRelations, TTablesConfig, TSchema> {\n\tstatic override readonly [entityKind]: string = 'NeonHttpTransaction';\n\n\toverride async transaction<T>(\n\t\t_transaction: (tx: NeonTransaction<TFullSchema, TRelations, TTablesConfig, TSchema>) => Promise<T>,\n\t): Promise<T> {\n\t\tthrow new Error('No transactions support in neon-http driver');\n\t\t// const savepointName = `sp${this.nestedIndex + 1}`;\n\t\t// const tx = new NeonTransaction(this.dialect, this.session, this.relations, this.schema, this.nestedIndex + 1);\n\t\t// await tx.execute(sql.raw(`savepoint ${savepointName}`));\n\t\t// try {\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 (e) {\n\t\t// \tawait tx.execute(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t// \tthrow e;\n\t\t// }\n\t}\n}\n\nexport type NeonHttpQueryResult<T> = Omit<FullQueryResults<false>, 'rows'> & { rows: T[] };\n\nexport interface NeonHttpQueryResultHKT extends PgQueryResultHKT {\n\ttype: NeonHttpQueryResult<this['row']>;\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/neon-http/session.ts"],"sourcesContent":["import type { FullQueryResults, NeonQueryFunction, NeonQueryPromise } from '@neondatabase/serverless';\nimport type * as V1 from '~/_relations.ts';\nimport type { BatchItem } from '~/batch.ts';\nimport { type Cache, NoopCache } from '~/cache/core/index.ts';\nimport type { WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { PgDialect } from '~/pg-core/dialect.ts';\nimport { PgTransaction } from '~/pg-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/pg-core/query-builders/select.types.ts';\nimport type { PgQueryResultHKT, PgTransactionConfig, PreparedQueryConfig } from '~/pg-core/session.ts';\nimport { PgPreparedQuery as PgPreparedQuery, PgSession } from '~/pg-core/session.ts';\nimport type { AnyRelations, TablesRelationalConfig } from '~/relations.ts';\nimport type { PreparedQuery } from '~/session.ts';\nimport { fillPlaceholders, type Query, type SQL } from '~/sql/sql.ts';\nimport { mapResultRow, type NeonAuthToken } from '~/utils.ts';\n\nexport type NeonHttpClient = NeonQueryFunction<any, any>;\n\nconst rawQueryConfig = {\n\tarrayMode: false,\n\tfullResults: true,\n} as const;\nconst queryConfig = {\n\tarrayMode: true,\n\tfullResults: true,\n} as const;\n\nexport class NeonHttpPreparedQuery<\n\tT extends PreparedQueryConfig,\n\tTIsRqbV2 extends boolean = false,\n> extends PgPreparedQuery<T> {\n\tstatic override readonly [entityKind]: string = 'NeonHttpPreparedQuery';\n\tprivate clientQuery: (sql: string, params: any[], opts: Record<string, any>) => NeonQueryPromise<any, any>;\n\n\tconstructor(\n\t\tprivate client: NeonHttpClient,\n\t\tquery: Query,\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 _isResponseInArrayMode: boolean,\n\t\tprivate customResultMapper?: (\n\t\t\trows: TIsRqbV2 extends true ? Record<string, unknown>[] : unknown[][],\n\t\t) => T['execute'],\n\t\tprivate isRqbV2Query?: TIsRqbV2,\n\t) {\n\t\tsuper(query, cache, queryMetadata, cacheConfig);\n\t\t// `client.query` is for @neondatabase/serverless v1.0.0 and up, where the\n\t\t// root query function `client` is only usable as a template function;\n\t\t// `client` is a fallback for earlier versions\n\t\tthis.clientQuery = (client as any).query ?? client as any;\n\t}\n\n\tasync execute(placeholderValues: Record<string, unknown> | undefined): Promise<T['execute']>;\n\t/** @internal */\n\tasync execute(placeholderValues: Record<string, unknown> | undefined, token?: NeonAuthToken): Promise<T['execute']>;\n\t/** @internal */\n\tasync execute(\n\t\tplaceholderValues: Record<string, unknown> | undefined = {},\n\t\ttoken: NeonAuthToken | undefined = this.authToken,\n\t): Promise<T['execute']> {\n\t\tif (this.isRqbV2Query) return this.executeRqbV2(placeholderValues, token);\n\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues);\n\n\t\tthis.logger.logQuery(this.query.sql, params);\n\n\t\tconst { fields, clientQuery, query, customResultMapper } = this;\n\n\t\tif (!fields && !customResultMapper) {\n\t\t\treturn this.queryWithCache(query.sql, params, async () => {\n\t\t\t\treturn clientQuery(\n\t\t\t\t\tquery.sql,\n\t\t\t\t\tparams,\n\t\t\t\t\ttoken === undefined\n\t\t\t\t\t\t? rawQueryConfig\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t...rawQueryConfig,\n\t\t\t\t\t\t\tauthToken: token,\n\t\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\n\t\tconst result = await this.queryWithCache(query.sql, params, async () => {\n\t\t\treturn await clientQuery(\n\t\t\t\tquery.sql,\n\t\t\t\tparams,\n\t\t\t\ttoken === undefined\n\t\t\t\t\t? queryConfig\n\t\t\t\t\t: {\n\t\t\t\t\t\t...queryConfig,\n\t\t\t\t\t\tauthToken: token,\n\t\t\t\t\t},\n\t\t\t);\n\t\t});\n\n\t\treturn this.mapResult(result);\n\t}\n\n\tprivate async executeRqbV2(\n\t\tplaceholderValues: Record<string, unknown>,\n\t\ttoken: NeonAuthToken | undefined,\n\t): Promise<T['execute']> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues);\n\n\t\tthis.logger.logQuery(this.query.sql, params);\n\n\t\tconst { clientQuery, query, customResultMapper } = this;\n\n\t\tconst result = await clientQuery(\n\t\t\tquery.sql,\n\t\t\tparams,\n\t\t\ttoken === undefined\n\t\t\t\t? rawQueryConfig\n\t\t\t\t: {\n\t\t\t\t\t...rawQueryConfig,\n\t\t\t\t\tauthToken: token,\n\t\t\t\t},\n\t\t);\n\n\t\tconst rows = (result as FullQueryResults<false>).rows;\n\n\t\treturn (customResultMapper as (rows: Record<string, unknown>[]) => T['execute'])(rows);\n\t}\n\n\toverride mapResult(result: unknown): unknown {\n\t\tif (!this.fields && !this.customResultMapper) {\n\t\t\treturn result;\n\t\t}\n\n\t\tconst rows = (result as FullQueryResults<true>).rows;\n\n\t\tif (this.customResultMapper) {\n\t\t\treturn (this.customResultMapper as (rows: unknown[][]) => T['execute'])(rows);\n\t\t}\n\n\t\treturn rows.map((row) => mapResultRow(this.fields!, row, this.joinsNotNullableMap));\n\t}\n\n\tall(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['all']> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues);\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\treturn this.clientQuery(\n\t\t\tthis.query.sql,\n\t\t\tparams,\n\t\t\tthis.authToken === undefined ? rawQueryConfig : {\n\t\t\t\t...rawQueryConfig,\n\t\t\t\tauthToken: this.authToken,\n\t\t\t},\n\t\t).then((result) => result.rows);\n\t}\n\n\tvalues(placeholderValues: Record<string, unknown> | undefined): Promise<T['values']>;\n\t/** @internal */\n\tvalues(placeholderValues: Record<string, unknown> | undefined, token?: NeonAuthToken): Promise<T['values']>;\n\t/** @internal */\n\tvalues(placeholderValues: Record<string, unknown> | undefined = {}, token?: NeonAuthToken): Promise<T['values']> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues);\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\treturn this.clientQuery(this.query.sql, params, { arrayMode: true, fullResults: true, authToken: token }).then((\n\t\t\tresult,\n\t\t) => result.rows);\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode() {\n\t\treturn this._isResponseInArrayMode;\n\t}\n}\n\nexport interface NeonHttpSessionOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n}\n\nexport class NeonHttpSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTTablesConfig extends TablesRelationalConfig,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends PgSession<NeonHttpQueryResultHKT, TFullSchema, TRelations, TTablesConfig, TSchema> {\n\tstatic override readonly [entityKind]: string = 'NeonHttpSession';\n\n\tprivate clientQuery: (sql: string, params: any[], opts: Record<string, any>) => NeonQueryPromise<any, any>;\n\tprivate logger: Logger;\n\tprivate cache: Cache;\n\n\tconstructor(\n\t\tprivate client: NeonHttpClient,\n\t\tdialect: PgDialect,\n\t\tprivate relations: AnyRelations,\n\t\tprivate schema: V1.RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: NeonHttpSessionOptions = {},\n\t) {\n\t\tsuper(dialect);\n\t\t// `client.query` is for @neondatabase/serverless v1.0.0 and up, where the\n\t\t// root query function `client` is only usable as a template function;\n\t\t// `client` is a fallback for earlier versions\n\t\tthis.clientQuery = (client as any).query ?? client as any;\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t\tthis.cache = options.cache ?? new NoopCache();\n\t}\n\n\tprepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => T['execute'],\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): PgPreparedQuery<T> {\n\t\treturn new NeonHttpPreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery,\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\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t);\n\t}\n\n\tprepareRelationalQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tcustomResultMapper: (rows: Record<string, unknown>[]) => T['execute'],\n\t): PgPreparedQuery<T> {\n\t\treturn new NeonHttpPreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery,\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\tfalse,\n\t\t\tcustomResultMapper,\n\t\t\ttrue,\n\t\t);\n\t}\n\n\tasync batch<U extends BatchItem<'pg'>, T extends Readonly<[U, ...U[]]>>(\n\t\tqueries: T,\n\t) {\n\t\tconst preparedQueries: PreparedQuery[] = [];\n\t\tconst builtQueries: NeonQueryPromise<any, true>[] = [];\n\t\tfor (const query of queries) {\n\t\t\tconst preparedQuery = query._prepare();\n\t\t\tconst builtQuery = preparedQuery.getQuery();\n\t\t\tpreparedQueries.push(preparedQuery);\n\t\t\tbuiltQueries.push(\n\t\t\t\tthis.clientQuery(builtQuery.sql, builtQuery.params, {\n\t\t\t\t\tfullResults: true,\n\t\t\t\t\tarrayMode: preparedQuery.isResponseInArrayMode(),\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\tconst batchResults = await this.client.transaction(builtQueries, queryConfig);\n\n\t\treturn batchResults.map((result, i) => preparedQueries[i]!.mapResult(result, true)) as any;\n\t}\n\n\t// change return type to QueryRows<true>\n\tasync query(query: string, params: unknown[]): Promise<FullQueryResults<true>> {\n\t\tthis.logger.logQuery(query, params);\n\t\tconst result = await this.clientQuery(query, params, { arrayMode: true, fullResults: true });\n\t\treturn result;\n\t}\n\n\t// change return type to QueryRows<false>\n\tasync queryObjects(\n\t\tquery: string,\n\t\tparams: unknown[],\n\t): Promise<FullQueryResults<false>> {\n\t\treturn this.clientQuery(query, params, { arrayMode: false, fullResults: true });\n\t}\n\n\toverride async count(sql: SQL): Promise<number>;\n\t/** @internal */\n\toverride async count(sql: SQL, token?: NeonAuthToken): Promise<number>;\n\t/** @internal */\n\toverride async count(sql: SQL, token?: NeonAuthToken): Promise<number> {\n\t\tconst res = await this.execute<{ rows: [{ count: string }] }>(sql, token);\n\n\t\treturn Number(\n\t\t\tres['rows'][0]['count'],\n\t\t);\n\t}\n\n\toverride async transaction<T>(\n\t\t_transaction: (tx: NeonTransaction<TFullSchema, TRelations, TTablesConfig, TSchema>) => Promise<T>,\n\t\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t\t_config: PgTransactionConfig = {},\n\t): Promise<T> {\n\t\tthrow new Error('No transactions support in neon-http driver');\n\t}\n}\n\nexport class NeonTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTTablesConfig extends TablesRelationalConfig,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends PgTransaction<NeonHttpQueryResultHKT, TFullSchema, TRelations, TTablesConfig, TSchema> {\n\tstatic override readonly [entityKind]: string = 'NeonHttpTransaction';\n\n\toverride async transaction<T>(\n\t\t_transaction: (tx: NeonTransaction<TFullSchema, TRelations, TTablesConfig, TSchema>) => Promise<T>,\n\t): Promise<T> {\n\t\tthrow new Error('No transactions support in neon-http driver');\n\t\t// const savepointName = `sp${this.nestedIndex + 1}`;\n\t\t// const tx = new NeonTransaction(this.dialect, this.session, this.relations, this.schema, this.nestedIndex + 1);\n\t\t// await tx.execute(sql.raw(`savepoint ${savepointName}`));\n\t\t// try {\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 (e) {\n\t\t// \tawait tx.execute(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t// \tthrow e;\n\t\t// }\n\t}\n}\n\nexport type NeonHttpQueryResult<T> = Omit<FullQueryResults<false>, 'rows'> & { rows: T[] };\n\nexport interface NeonHttpQueryResultHKT extends PgQueryResultHKT {\n\ttype: NeonHttpQueryResult<this['row']>;\n}\n"],"mappings":"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","names":[]}
@@ -1,6 +1,8 @@
1
1
  import type { FullQueryResults, NeonQueryFunction } from '@neondatabase/serverless';
2
2
  import type * as V1 from "../_relations.cjs";
3
3
  import type { BatchItem } from "../batch.cjs";
4
+ import { type Cache } from "../cache/core/index.cjs";
5
+ import type { WithCacheConfig } from "../cache/core/types.cjs";
4
6
  import { entityKind } from "../entity.cjs";
5
7
  import type { Logger } from "../logger.cjs";
6
8
  import type { PgDialect } from "../pg-core/dialect.cjs";
@@ -20,7 +22,10 @@ export declare class NeonHttpPreparedQuery<T extends PreparedQueryConfig, TIsRqb
20
22
  private isRqbV2Query?;
21
23
  static readonly [entityKind]: string;
22
24
  private clientQuery;
23
- constructor(client: NeonHttpClient, query: Query, logger: Logger, fields: SelectedFieldsOrdered | undefined, _isResponseInArrayMode: boolean, customResultMapper?: ((rows: TIsRqbV2 extends true ? Record<string, unknown>[] : unknown[][]) => T["execute"]) | undefined, isRqbV2Query?: TIsRqbV2 | undefined);
25
+ constructor(client: NeonHttpClient, query: Query, logger: Logger, cache: Cache, queryMetadata: {
26
+ type: 'select' | 'update' | 'delete' | 'insert';
27
+ tables: string[];
28
+ } | undefined, cacheConfig: WithCacheConfig | undefined, fields: SelectedFieldsOrdered | undefined, _isResponseInArrayMode: boolean, customResultMapper?: ((rows: TIsRqbV2 extends true ? Record<string, unknown>[] : unknown[][]) => T["execute"]) | undefined, isRqbV2Query?: TIsRqbV2 | undefined);
24
29
  execute(placeholderValues: Record<string, unknown> | undefined): Promise<T['execute']>;
25
30
  private executeRqbV2;
26
31
  mapResult(result: unknown): unknown;
@@ -29,6 +34,7 @@ export declare class NeonHttpPreparedQuery<T extends PreparedQueryConfig, TIsRqb
29
34
  }
30
35
  export interface NeonHttpSessionOptions {
31
36
  logger?: Logger;
37
+ cache?: Cache;
32
38
  }
33
39
  export declare class NeonHttpSession<TFullSchema extends Record<string, unknown>, TRelations extends AnyRelations, TTablesConfig extends TablesRelationalConfig, TSchema extends V1.TablesRelationalConfig> extends PgSession<NeonHttpQueryResultHKT, TFullSchema, TRelations, TTablesConfig, TSchema> {
34
40
  private client;
@@ -38,8 +44,12 @@ export declare class NeonHttpSession<TFullSchema extends Record<string, unknown>
38
44
  static readonly [entityKind]: string;
39
45
  private clientQuery;
40
46
  private logger;
47
+ private cache;
41
48
  constructor(client: NeonHttpClient, dialect: PgDialect, relations: AnyRelations, schema: V1.RelationalSchemaConfig<TSchema> | undefined, options?: NeonHttpSessionOptions);
42
- prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(query: Query, fields: SelectedFieldsOrdered | undefined, name: string | undefined, isResponseInArrayMode: boolean, customResultMapper?: (rows: unknown[][]) => T['execute']): PgPreparedQuery<T>;
49
+ prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(query: Query, fields: SelectedFieldsOrdered | undefined, name: string | undefined, isResponseInArrayMode: boolean, customResultMapper?: (rows: unknown[][]) => T['execute'], queryMetadata?: {
50
+ type: 'select' | 'update' | 'delete' | 'insert';
51
+ tables: string[];
52
+ }, cacheConfig?: WithCacheConfig): PgPreparedQuery<T>;
43
53
  prepareRelationalQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(query: Query, fields: SelectedFieldsOrdered | undefined, name: string | undefined, customResultMapper: (rows: Record<string, unknown>[]) => T['execute']): PgPreparedQuery<T>;
44
54
  batch<U extends BatchItem<'pg'>, T extends Readonly<[U, ...U[]]>>(queries: T): Promise<any>;
45
55
  query(query: string, params: unknown[]): Promise<FullQueryResults<true>>;
@@ -1,6 +1,8 @@
1
1
  import type { FullQueryResults, NeonQueryFunction } from '@neondatabase/serverless';
2
2
  import type * as V1 from "../_relations.js";
3
3
  import type { BatchItem } from "../batch.js";
4
+ import { type Cache } from "../cache/core/index.js";
5
+ import type { WithCacheConfig } from "../cache/core/types.js";
4
6
  import { entityKind } from "../entity.js";
5
7
  import type { Logger } from "../logger.js";
6
8
  import type { PgDialect } from "../pg-core/dialect.js";
@@ -20,7 +22,10 @@ export declare class NeonHttpPreparedQuery<T extends PreparedQueryConfig, TIsRqb
20
22
  private isRqbV2Query?;
21
23
  static readonly [entityKind]: string;
22
24
  private clientQuery;
23
- constructor(client: NeonHttpClient, query: Query, logger: Logger, fields: SelectedFieldsOrdered | undefined, _isResponseInArrayMode: boolean, customResultMapper?: ((rows: TIsRqbV2 extends true ? Record<string, unknown>[] : unknown[][]) => T["execute"]) | undefined, isRqbV2Query?: TIsRqbV2 | undefined);
25
+ constructor(client: NeonHttpClient, query: Query, logger: Logger, cache: Cache, queryMetadata: {
26
+ type: 'select' | 'update' | 'delete' | 'insert';
27
+ tables: string[];
28
+ } | undefined, cacheConfig: WithCacheConfig | undefined, fields: SelectedFieldsOrdered | undefined, _isResponseInArrayMode: boolean, customResultMapper?: ((rows: TIsRqbV2 extends true ? Record<string, unknown>[] : unknown[][]) => T["execute"]) | undefined, isRqbV2Query?: TIsRqbV2 | undefined);
24
29
  execute(placeholderValues: Record<string, unknown> | undefined): Promise<T['execute']>;
25
30
  private executeRqbV2;
26
31
  mapResult(result: unknown): unknown;
@@ -29,6 +34,7 @@ export declare class NeonHttpPreparedQuery<T extends PreparedQueryConfig, TIsRqb
29
34
  }
30
35
  export interface NeonHttpSessionOptions {
31
36
  logger?: Logger;
37
+ cache?: Cache;
32
38
  }
33
39
  export declare class NeonHttpSession<TFullSchema extends Record<string, unknown>, TRelations extends AnyRelations, TTablesConfig extends TablesRelationalConfig, TSchema extends V1.TablesRelationalConfig> extends PgSession<NeonHttpQueryResultHKT, TFullSchema, TRelations, TTablesConfig, TSchema> {
34
40
  private client;
@@ -38,8 +44,12 @@ export declare class NeonHttpSession<TFullSchema extends Record<string, unknown>
38
44
  static readonly [entityKind]: string;
39
45
  private clientQuery;
40
46
  private logger;
47
+ private cache;
41
48
  constructor(client: NeonHttpClient, dialect: PgDialect, relations: AnyRelations, schema: V1.RelationalSchemaConfig<TSchema> | undefined, options?: NeonHttpSessionOptions);
42
- prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(query: Query, fields: SelectedFieldsOrdered | undefined, name: string | undefined, isResponseInArrayMode: boolean, customResultMapper?: (rows: unknown[][]) => T['execute']): PgPreparedQuery<T>;
49
+ prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(query: Query, fields: SelectedFieldsOrdered | undefined, name: string | undefined, isResponseInArrayMode: boolean, customResultMapper?: (rows: unknown[][]) => T['execute'], queryMetadata?: {
50
+ type: 'select' | 'update' | 'delete' | 'insert';
51
+ tables: string[];
52
+ }, cacheConfig?: WithCacheConfig): PgPreparedQuery<T>;
43
53
  prepareRelationalQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(query: Query, fields: SelectedFieldsOrdered | undefined, name: string | undefined, customResultMapper: (rows: Record<string, unknown>[]) => T['execute']): PgPreparedQuery<T>;
44
54
  batch<U extends BatchItem<'pg'>, T extends Readonly<[U, ...U[]]>>(queries: T): Promise<any>;
45
55
  query(query: string, params: unknown[]): Promise<FullQueryResults<true>>;
@@ -1,3 +1,4 @@
1
+ import { NoopCache } from "../cache/core/index.js";
1
2
  import { entityKind } from "../entity.js";
2
3
  import { NoopLogger } from "../logger.js";
3
4
  import { PgTransaction } from "../pg-core/index.js";
@@ -13,8 +14,8 @@ const queryConfig = {
13
14
  fullResults: true
14
15
  };
15
16
  class NeonHttpPreparedQuery extends PgPreparedQuery {
16
- constructor(client, query, logger, fields, _isResponseInArrayMode, customResultMapper, isRqbV2Query) {
17
- super(query);
17
+ constructor(client, query, logger, cache, queryMetadata, cacheConfig, fields, _isResponseInArrayMode, customResultMapper, isRqbV2Query) {
18
+ super(query, cache, queryMetadata, cacheConfig);
18
19
  this.client = client;
19
20
  this.logger = logger;
20
21
  this.fields = fields;
@@ -27,36 +28,39 @@ class NeonHttpPreparedQuery extends PgPreparedQuery {
27
28
  clientQuery;
28
29
  /** @internal */
29
30
  async execute(placeholderValues = {}, token = this.authToken) {
30
- if (this.isRqbV2Query)
31
- return this.executeRqbV2(placeholderValues, token);
31
+ if (this.isRqbV2Query) return this.executeRqbV2(placeholderValues, token);
32
32
  const params = fillPlaceholders(this.query.params, placeholderValues);
33
33
  this.logger.logQuery(this.query.sql, params);
34
34
  const { fields, clientQuery, query, customResultMapper } = this;
35
35
  if (!fields && !customResultMapper) {
36
- return clientQuery(
36
+ return this.queryWithCache(query.sql, params, async () => {
37
+ return clientQuery(
38
+ query.sql,
39
+ params,
40
+ token === void 0 ? rawQueryConfig : {
41
+ ...rawQueryConfig,
42
+ authToken: token
43
+ }
44
+ );
45
+ });
46
+ }
47
+ const result = await this.queryWithCache(query.sql, params, async () => {
48
+ return await clientQuery(
37
49
  query.sql,
38
50
  params,
39
- token === void 0 ? rawQueryConfig : {
40
- ...rawQueryConfig,
51
+ token === void 0 ? queryConfig : {
52
+ ...queryConfig,
41
53
  authToken: token
42
54
  }
43
55
  );
44
- }
45
- const result = await clientQuery(
46
- query.sql,
47
- params,
48
- token === void 0 ? queryConfig : {
49
- ...queryConfig,
50
- authToken: token
51
- }
52
- );
56
+ });
53
57
  return this.mapResult(result);
54
58
  }
55
59
  async executeRqbV2(placeholderValues, token) {
56
60
  const params = fillPlaceholders(this.query.params, placeholderValues);
57
61
  this.logger.logQuery(this.query.sql, params);
58
- const { client, query, customResultMapper } = this;
59
- const result = await client(
62
+ const { clientQuery, query, customResultMapper } = this;
63
+ const result = await clientQuery(
60
64
  query.sql,
61
65
  params,
62
66
  token === void 0 ? rawQueryConfig : {
@@ -109,15 +113,20 @@ class NeonHttpSession extends PgSession {
109
113
  this.options = options;
110
114
  this.clientQuery = client.query ?? client;
111
115
  this.logger = options.logger ?? new NoopLogger();
116
+ this.cache = options.cache ?? new NoopCache();
112
117
  }
113
118
  static [entityKind] = "NeonHttpSession";
114
119
  clientQuery;
115
120
  logger;
116
- prepareQuery(query, fields, name, isResponseInArrayMode, customResultMapper) {
121
+ cache;
122
+ prepareQuery(query, fields, name, isResponseInArrayMode, customResultMapper, queryMetadata, cacheConfig) {
117
123
  return new NeonHttpPreparedQuery(
118
124
  this.client,
119
125
  query,
120
126
  this.logger,
127
+ this.cache,
128
+ queryMetadata,
129
+ cacheConfig,
121
130
  fields,
122
131
  isResponseInArrayMode,
123
132
  customResultMapper
@@ -128,6 +137,9 @@ class NeonHttpSession extends PgSession {
128
137
  this.client,
129
138
  query,
130
139
  this.logger,
140
+ this.cache,
141
+ void 0,
142
+ void 0,
131
143
  fields,
132
144
  false,
133
145
  customResultMapper,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/neon-http/session.ts"],"sourcesContent":["import type { FullQueryResults, NeonQueryFunction, NeonQueryPromise } from '@neondatabase/serverless';\nimport type * as V1 from '~/_relations.ts';\nimport type { BatchItem } from '~/batch.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { PgDialect } from '~/pg-core/dialect.ts';\nimport { PgTransaction } from '~/pg-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/pg-core/query-builders/select.types.ts';\nimport type { PgQueryResultHKT, PgTransactionConfig, PreparedQueryConfig } from '~/pg-core/session.ts';\nimport { PgPreparedQuery as PgPreparedQuery, PgSession } from '~/pg-core/session.ts';\nimport type { AnyRelations, TablesRelationalConfig } from '~/relations.ts';\nimport type { PreparedQuery } from '~/session.ts';\nimport { fillPlaceholders, type Query, type SQL } from '~/sql/sql.ts';\nimport { mapResultRow, type NeonAuthToken } from '~/utils.ts';\n\nexport type NeonHttpClient = NeonQueryFunction<any, any>;\n\nconst rawQueryConfig = {\n\tarrayMode: false,\n\tfullResults: true,\n} as const;\nconst queryConfig = {\n\tarrayMode: true,\n\tfullResults: true,\n} as const;\n\nexport class NeonHttpPreparedQuery<\n\tT extends PreparedQueryConfig,\n\tTIsRqbV2 extends boolean = false,\n> extends PgPreparedQuery<T> {\n\tstatic override readonly [entityKind]: string = 'NeonHttpPreparedQuery';\n\tprivate clientQuery: (sql: string, params: any[], opts: Record<string, any>) => NeonQueryPromise<any, any>;\n\n\tconstructor(\n\t\tprivate client: NeonHttpClient,\n\t\tquery: Query,\n\t\tprivate logger: Logger,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\tprivate _isResponseInArrayMode: boolean,\n\t\tprivate customResultMapper?: (\n\t\t\trows: TIsRqbV2 extends true ? Record<string, unknown>[] : unknown[][],\n\t\t) => T['execute'],\n\t\tprivate isRqbV2Query?: TIsRqbV2,\n\t) {\n\t\tsuper(query);\n\t\t// `client.query` is for @neondatabase/serverless v1.0.0 and up, where the\n\t\t// root query function `client` is only usable as a template function;\n\t\t// `client` is a fallback for earlier versions\n\t\tthis.clientQuery = (client as any).query ?? client as any;\n\t}\n\n\tasync execute(placeholderValues: Record<string, unknown> | undefined): Promise<T['execute']>;\n\t/** @internal */\n\tasync execute(placeholderValues: Record<string, unknown> | undefined, token?: NeonAuthToken): Promise<T['execute']>;\n\t/** @internal */\n\tasync execute(\n\t\tplaceholderValues: Record<string, unknown> | undefined = {},\n\t\ttoken: NeonAuthToken | undefined = this.authToken,\n\t): Promise<T['execute']> {\n\t\tif (this.isRqbV2Query) return this.executeRqbV2(placeholderValues, token);\n\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues);\n\n\t\tthis.logger.logQuery(this.query.sql, params);\n\n\t\tconst { fields, clientQuery, query, customResultMapper } = this;\n\n\t\tif (!fields && !customResultMapper) {\n\t\t\treturn clientQuery(\n\t\t\t\tquery.sql,\n\t\t\t\tparams,\n\t\t\t\ttoken === undefined\n\t\t\t\t\t? rawQueryConfig\n\t\t\t\t\t: {\n\t\t\t\t\t\t...rawQueryConfig,\n\t\t\t\t\t\tauthToken: token,\n\t\t\t\t\t},\n\t\t\t);\n\t\t}\n\n\t\tconst result = await clientQuery(\n\t\t\tquery.sql,\n\t\t\tparams,\n\t\t\ttoken === undefined\n\t\t\t\t? queryConfig\n\t\t\t\t: {\n\t\t\t\t\t...queryConfig,\n\t\t\t\t\tauthToken: token,\n\t\t\t\t},\n\t\t);\n\n\t\treturn this.mapResult(result);\n\t}\n\n\tprivate async executeRqbV2(\n\t\tplaceholderValues: Record<string, unknown>,\n\t\ttoken: NeonAuthToken | undefined,\n\t): Promise<T['execute']> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues);\n\n\t\tthis.logger.logQuery(this.query.sql, params);\n\n\t\tconst { client, query, customResultMapper } = this;\n\n\t\tconst result = await client(\n\t\t\tquery.sql,\n\t\t\tparams,\n\t\t\ttoken === undefined\n\t\t\t\t? rawQueryConfig\n\t\t\t\t: {\n\t\t\t\t\t...rawQueryConfig,\n\t\t\t\t\tauthToken: token,\n\t\t\t\t},\n\t\t);\n\n\t\tconst rows = (result as FullQueryResults<false>).rows;\n\n\t\treturn (customResultMapper as (rows: Record<string, unknown>[]) => T['execute'])(rows);\n\t}\n\n\toverride mapResult(result: unknown): unknown {\n\t\tif (!this.fields && !this.customResultMapper) {\n\t\t\treturn result;\n\t\t}\n\n\t\tconst rows = (result as FullQueryResults<true>).rows;\n\n\t\tif (this.customResultMapper) {\n\t\t\treturn (this.customResultMapper as (rows: unknown[][]) => T['execute'])(rows);\n\t\t}\n\n\t\treturn rows.map((row) => mapResultRow(this.fields!, row, this.joinsNotNullableMap));\n\t}\n\n\tall(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['all']> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues);\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\treturn this.clientQuery(\n\t\t\tthis.query.sql,\n\t\t\tparams,\n\t\t\tthis.authToken === undefined ? rawQueryConfig : {\n\t\t\t\t...rawQueryConfig,\n\t\t\t\tauthToken: this.authToken,\n\t\t\t},\n\t\t).then((result) => result.rows);\n\t}\n\n\tvalues(placeholderValues: Record<string, unknown> | undefined): Promise<T['values']>;\n\t/** @internal */\n\tvalues(placeholderValues: Record<string, unknown> | undefined, token?: NeonAuthToken): Promise<T['values']>;\n\t/** @internal */\n\tvalues(placeholderValues: Record<string, unknown> | undefined = {}, token?: NeonAuthToken): Promise<T['values']> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues);\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\treturn this.clientQuery(this.query.sql, params, { arrayMode: true, fullResults: true, authToken: token }).then((\n\t\t\tresult,\n\t\t) => result.rows);\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode() {\n\t\treturn this._isResponseInArrayMode;\n\t}\n}\n\nexport interface NeonHttpSessionOptions {\n\tlogger?: Logger;\n}\n\nexport class NeonHttpSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTTablesConfig extends TablesRelationalConfig,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends PgSession<NeonHttpQueryResultHKT, TFullSchema, TRelations, TTablesConfig, TSchema> {\n\tstatic override readonly [entityKind]: string = 'NeonHttpSession';\n\n\tprivate clientQuery: (sql: string, params: any[], opts: Record<string, any>) => NeonQueryPromise<any, any>;\n\tprivate logger: Logger;\n\n\tconstructor(\n\t\tprivate client: NeonHttpClient,\n\t\tdialect: PgDialect,\n\t\tprivate relations: AnyRelations,\n\t\tprivate schema: V1.RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: NeonHttpSessionOptions = {},\n\t) {\n\t\tsuper(dialect);\n\t\t// `client.query` is for @neondatabase/serverless v1.0.0 and up, where the\n\t\t// root query function `client` is only usable as a template function;\n\t\t// `client` is a fallback for earlier versions\n\t\tthis.clientQuery = (client as any).query ?? client as any;\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t}\n\n\tprepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => T['execute'],\n\t): PgPreparedQuery<T> {\n\t\treturn new NeonHttpPreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t);\n\t}\n\n\tprepareRelationalQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tcustomResultMapper: (rows: Record<string, unknown>[]) => T['execute'],\n\t): PgPreparedQuery<T> {\n\t\treturn new NeonHttpPreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\tfalse,\n\t\t\tcustomResultMapper,\n\t\t\ttrue,\n\t\t);\n\t}\n\n\tasync batch<U extends BatchItem<'pg'>, T extends Readonly<[U, ...U[]]>>(\n\t\tqueries: T,\n\t) {\n\t\tconst preparedQueries: PreparedQuery[] = [];\n\t\tconst builtQueries: NeonQueryPromise<any, true>[] = [];\n\t\tfor (const query of queries) {\n\t\t\tconst preparedQuery = query._prepare();\n\t\t\tconst builtQuery = preparedQuery.getQuery();\n\t\t\tpreparedQueries.push(preparedQuery);\n\t\t\tbuiltQueries.push(\n\t\t\t\tthis.clientQuery(builtQuery.sql, builtQuery.params, {\n\t\t\t\t\tfullResults: true,\n\t\t\t\t\tarrayMode: preparedQuery.isResponseInArrayMode(),\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\tconst batchResults = await this.client.transaction(builtQueries, queryConfig);\n\n\t\treturn batchResults.map((result, i) => preparedQueries[i]!.mapResult(result, true)) as any;\n\t}\n\n\t// change return type to QueryRows<true>\n\tasync query(query: string, params: unknown[]): Promise<FullQueryResults<true>> {\n\t\tthis.logger.logQuery(query, params);\n\t\tconst result = await this.clientQuery(query, params, { arrayMode: true, fullResults: true });\n\t\treturn result;\n\t}\n\n\t// change return type to QueryRows<false>\n\tasync queryObjects(\n\t\tquery: string,\n\t\tparams: unknown[],\n\t): Promise<FullQueryResults<false>> {\n\t\treturn this.clientQuery(query, params, { arrayMode: false, fullResults: true });\n\t}\n\n\toverride async count(sql: SQL): Promise<number>;\n\t/** @internal */\n\toverride async count(sql: SQL, token?: NeonAuthToken): Promise<number>;\n\t/** @internal */\n\toverride async count(sql: SQL, token?: NeonAuthToken): Promise<number> {\n\t\tconst res = await this.execute<{ rows: [{ count: string }] }>(sql, token);\n\n\t\treturn Number(\n\t\t\tres['rows'][0]['count'],\n\t\t);\n\t}\n\n\toverride async transaction<T>(\n\t\t_transaction: (tx: NeonTransaction<TFullSchema, TRelations, TTablesConfig, TSchema>) => Promise<T>,\n\t\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t\t_config: PgTransactionConfig = {},\n\t): Promise<T> {\n\t\tthrow new Error('No transactions support in neon-http driver');\n\t}\n}\n\nexport class NeonTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTTablesConfig extends TablesRelationalConfig,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends PgTransaction<NeonHttpQueryResultHKT, TFullSchema, TRelations, TTablesConfig, TSchema> {\n\tstatic override readonly [entityKind]: string = 'NeonHttpTransaction';\n\n\toverride async transaction<T>(\n\t\t_transaction: (tx: NeonTransaction<TFullSchema, TRelations, TTablesConfig, TSchema>) => Promise<T>,\n\t): Promise<T> {\n\t\tthrow new Error('No transactions support in neon-http driver');\n\t\t// const savepointName = `sp${this.nestedIndex + 1}`;\n\t\t// const tx = new NeonTransaction(this.dialect, this.session, this.relations, this.schema, this.nestedIndex + 1);\n\t\t// await tx.execute(sql.raw(`savepoint ${savepointName}`));\n\t\t// try {\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 (e) {\n\t\t// \tawait tx.execute(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t// \tthrow e;\n\t\t// }\n\t}\n}\n\nexport type NeonHttpQueryResult<T> = Omit<FullQueryResults<false>, 'rows'> & { rows: T[] };\n\nexport interface NeonHttpQueryResultHKT extends PgQueryResultHKT {\n\ttype: NeonHttpQueryResult<this['row']>;\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/neon-http/session.ts"],"sourcesContent":["import type { FullQueryResults, NeonQueryFunction, NeonQueryPromise } from '@neondatabase/serverless';\nimport type * as V1 from '~/_relations.ts';\nimport type { BatchItem } from '~/batch.ts';\nimport { type Cache, NoopCache } from '~/cache/core/index.ts';\nimport type { WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { PgDialect } from '~/pg-core/dialect.ts';\nimport { PgTransaction } from '~/pg-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/pg-core/query-builders/select.types.ts';\nimport type { PgQueryResultHKT, PgTransactionConfig, PreparedQueryConfig } from '~/pg-core/session.ts';\nimport { PgPreparedQuery as PgPreparedQuery, PgSession } from '~/pg-core/session.ts';\nimport type { AnyRelations, TablesRelationalConfig } from '~/relations.ts';\nimport type { PreparedQuery } from '~/session.ts';\nimport { fillPlaceholders, type Query, type SQL } from '~/sql/sql.ts';\nimport { mapResultRow, type NeonAuthToken } from '~/utils.ts';\n\nexport type NeonHttpClient = NeonQueryFunction<any, any>;\n\nconst rawQueryConfig = {\n\tarrayMode: false,\n\tfullResults: true,\n} as const;\nconst queryConfig = {\n\tarrayMode: true,\n\tfullResults: true,\n} as const;\n\nexport class NeonHttpPreparedQuery<\n\tT extends PreparedQueryConfig,\n\tTIsRqbV2 extends boolean = false,\n> extends PgPreparedQuery<T> {\n\tstatic override readonly [entityKind]: string = 'NeonHttpPreparedQuery';\n\tprivate clientQuery: (sql: string, params: any[], opts: Record<string, any>) => NeonQueryPromise<any, any>;\n\n\tconstructor(\n\t\tprivate client: NeonHttpClient,\n\t\tquery: Query,\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 _isResponseInArrayMode: boolean,\n\t\tprivate customResultMapper?: (\n\t\t\trows: TIsRqbV2 extends true ? Record<string, unknown>[] : unknown[][],\n\t\t) => T['execute'],\n\t\tprivate isRqbV2Query?: TIsRqbV2,\n\t) {\n\t\tsuper(query, cache, queryMetadata, cacheConfig);\n\t\t// `client.query` is for @neondatabase/serverless v1.0.0 and up, where the\n\t\t// root query function `client` is only usable as a template function;\n\t\t// `client` is a fallback for earlier versions\n\t\tthis.clientQuery = (client as any).query ?? client as any;\n\t}\n\n\tasync execute(placeholderValues: Record<string, unknown> | undefined): Promise<T['execute']>;\n\t/** @internal */\n\tasync execute(placeholderValues: Record<string, unknown> | undefined, token?: NeonAuthToken): Promise<T['execute']>;\n\t/** @internal */\n\tasync execute(\n\t\tplaceholderValues: Record<string, unknown> | undefined = {},\n\t\ttoken: NeonAuthToken | undefined = this.authToken,\n\t): Promise<T['execute']> {\n\t\tif (this.isRqbV2Query) return this.executeRqbV2(placeholderValues, token);\n\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues);\n\n\t\tthis.logger.logQuery(this.query.sql, params);\n\n\t\tconst { fields, clientQuery, query, customResultMapper } = this;\n\n\t\tif (!fields && !customResultMapper) {\n\t\t\treturn this.queryWithCache(query.sql, params, async () => {\n\t\t\t\treturn clientQuery(\n\t\t\t\t\tquery.sql,\n\t\t\t\t\tparams,\n\t\t\t\t\ttoken === undefined\n\t\t\t\t\t\t? rawQueryConfig\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t...rawQueryConfig,\n\t\t\t\t\t\t\tauthToken: token,\n\t\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\n\t\tconst result = await this.queryWithCache(query.sql, params, async () => {\n\t\t\treturn await clientQuery(\n\t\t\t\tquery.sql,\n\t\t\t\tparams,\n\t\t\t\ttoken === undefined\n\t\t\t\t\t? queryConfig\n\t\t\t\t\t: {\n\t\t\t\t\t\t...queryConfig,\n\t\t\t\t\t\tauthToken: token,\n\t\t\t\t\t},\n\t\t\t);\n\t\t});\n\n\t\treturn this.mapResult(result);\n\t}\n\n\tprivate async executeRqbV2(\n\t\tplaceholderValues: Record<string, unknown>,\n\t\ttoken: NeonAuthToken | undefined,\n\t): Promise<T['execute']> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues);\n\n\t\tthis.logger.logQuery(this.query.sql, params);\n\n\t\tconst { clientQuery, query, customResultMapper } = this;\n\n\t\tconst result = await clientQuery(\n\t\t\tquery.sql,\n\t\t\tparams,\n\t\t\ttoken === undefined\n\t\t\t\t? rawQueryConfig\n\t\t\t\t: {\n\t\t\t\t\t...rawQueryConfig,\n\t\t\t\t\tauthToken: token,\n\t\t\t\t},\n\t\t);\n\n\t\tconst rows = (result as FullQueryResults<false>).rows;\n\n\t\treturn (customResultMapper as (rows: Record<string, unknown>[]) => T['execute'])(rows);\n\t}\n\n\toverride mapResult(result: unknown): unknown {\n\t\tif (!this.fields && !this.customResultMapper) {\n\t\t\treturn result;\n\t\t}\n\n\t\tconst rows = (result as FullQueryResults<true>).rows;\n\n\t\tif (this.customResultMapper) {\n\t\t\treturn (this.customResultMapper as (rows: unknown[][]) => T['execute'])(rows);\n\t\t}\n\n\t\treturn rows.map((row) => mapResultRow(this.fields!, row, this.joinsNotNullableMap));\n\t}\n\n\tall(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['all']> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues);\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\treturn this.clientQuery(\n\t\t\tthis.query.sql,\n\t\t\tparams,\n\t\t\tthis.authToken === undefined ? rawQueryConfig : {\n\t\t\t\t...rawQueryConfig,\n\t\t\t\tauthToken: this.authToken,\n\t\t\t},\n\t\t).then((result) => result.rows);\n\t}\n\n\tvalues(placeholderValues: Record<string, unknown> | undefined): Promise<T['values']>;\n\t/** @internal */\n\tvalues(placeholderValues: Record<string, unknown> | undefined, token?: NeonAuthToken): Promise<T['values']>;\n\t/** @internal */\n\tvalues(placeholderValues: Record<string, unknown> | undefined = {}, token?: NeonAuthToken): Promise<T['values']> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues);\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\treturn this.clientQuery(this.query.sql, params, { arrayMode: true, fullResults: true, authToken: token }).then((\n\t\t\tresult,\n\t\t) => result.rows);\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode() {\n\t\treturn this._isResponseInArrayMode;\n\t}\n}\n\nexport interface NeonHttpSessionOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n}\n\nexport class NeonHttpSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTTablesConfig extends TablesRelationalConfig,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends PgSession<NeonHttpQueryResultHKT, TFullSchema, TRelations, TTablesConfig, TSchema> {\n\tstatic override readonly [entityKind]: string = 'NeonHttpSession';\n\n\tprivate clientQuery: (sql: string, params: any[], opts: Record<string, any>) => NeonQueryPromise<any, any>;\n\tprivate logger: Logger;\n\tprivate cache: Cache;\n\n\tconstructor(\n\t\tprivate client: NeonHttpClient,\n\t\tdialect: PgDialect,\n\t\tprivate relations: AnyRelations,\n\t\tprivate schema: V1.RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: NeonHttpSessionOptions = {},\n\t) {\n\t\tsuper(dialect);\n\t\t// `client.query` is for @neondatabase/serverless v1.0.0 and up, where the\n\t\t// root query function `client` is only usable as a template function;\n\t\t// `client` is a fallback for earlier versions\n\t\tthis.clientQuery = (client as any).query ?? client as any;\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t\tthis.cache = options.cache ?? new NoopCache();\n\t}\n\n\tprepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => T['execute'],\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): PgPreparedQuery<T> {\n\t\treturn new NeonHttpPreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery,\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\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t);\n\t}\n\n\tprepareRelationalQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tcustomResultMapper: (rows: Record<string, unknown>[]) => T['execute'],\n\t): PgPreparedQuery<T> {\n\t\treturn new NeonHttpPreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery,\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\tfalse,\n\t\t\tcustomResultMapper,\n\t\t\ttrue,\n\t\t);\n\t}\n\n\tasync batch<U extends BatchItem<'pg'>, T extends Readonly<[U, ...U[]]>>(\n\t\tqueries: T,\n\t) {\n\t\tconst preparedQueries: PreparedQuery[] = [];\n\t\tconst builtQueries: NeonQueryPromise<any, true>[] = [];\n\t\tfor (const query of queries) {\n\t\t\tconst preparedQuery = query._prepare();\n\t\t\tconst builtQuery = preparedQuery.getQuery();\n\t\t\tpreparedQueries.push(preparedQuery);\n\t\t\tbuiltQueries.push(\n\t\t\t\tthis.clientQuery(builtQuery.sql, builtQuery.params, {\n\t\t\t\t\tfullResults: true,\n\t\t\t\t\tarrayMode: preparedQuery.isResponseInArrayMode(),\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\tconst batchResults = await this.client.transaction(builtQueries, queryConfig);\n\n\t\treturn batchResults.map((result, i) => preparedQueries[i]!.mapResult(result, true)) as any;\n\t}\n\n\t// change return type to QueryRows<true>\n\tasync query(query: string, params: unknown[]): Promise<FullQueryResults<true>> {\n\t\tthis.logger.logQuery(query, params);\n\t\tconst result = await this.clientQuery(query, params, { arrayMode: true, fullResults: true });\n\t\treturn result;\n\t}\n\n\t// change return type to QueryRows<false>\n\tasync queryObjects(\n\t\tquery: string,\n\t\tparams: unknown[],\n\t): Promise<FullQueryResults<false>> {\n\t\treturn this.clientQuery(query, params, { arrayMode: false, fullResults: true });\n\t}\n\n\toverride async count(sql: SQL): Promise<number>;\n\t/** @internal */\n\toverride async count(sql: SQL, token?: NeonAuthToken): Promise<number>;\n\t/** @internal */\n\toverride async count(sql: SQL, token?: NeonAuthToken): Promise<number> {\n\t\tconst res = await this.execute<{ rows: [{ count: string }] }>(sql, token);\n\n\t\treturn Number(\n\t\t\tres['rows'][0]['count'],\n\t\t);\n\t}\n\n\toverride async transaction<T>(\n\t\t_transaction: (tx: NeonTransaction<TFullSchema, TRelations, TTablesConfig, TSchema>) => Promise<T>,\n\t\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t\t_config: PgTransactionConfig = {},\n\t): Promise<T> {\n\t\tthrow new Error('No transactions support in neon-http driver');\n\t}\n}\n\nexport class NeonTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTTablesConfig extends TablesRelationalConfig,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends PgTransaction<NeonHttpQueryResultHKT, TFullSchema, TRelations, TTablesConfig, TSchema> {\n\tstatic override readonly [entityKind]: string = 'NeonHttpTransaction';\n\n\toverride async transaction<T>(\n\t\t_transaction: (tx: NeonTransaction<TFullSchema, TRelations, TTablesConfig, TSchema>) => Promise<T>,\n\t): Promise<T> {\n\t\tthrow new Error('No transactions support in neon-http driver');\n\t\t// const savepointName = `sp${this.nestedIndex + 1}`;\n\t\t// const tx = new NeonTransaction(this.dialect, this.session, this.relations, this.schema, this.nestedIndex + 1);\n\t\t// await tx.execute(sql.raw(`savepoint ${savepointName}`));\n\t\t// try {\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 (e) {\n\t\t// \tawait tx.execute(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t// \tthrow e;\n\t\t// }\n\t}\n}\n\nexport type NeonHttpQueryResult<T> = Omit<FullQueryResults<false>, 'rows'> & { rows: T[] };\n\nexport interface NeonHttpQueryResultHKT extends PgQueryResultHKT {\n\ttype: NeonHttpQueryResult<this['row']>;\n}\n"],"mappings":"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","names":[]}
@@ -49,7 +49,10 @@ class NeonDriver {
49
49
  }
50
50
  static [import_entity.entityKind] = "NeonDriver";
51
51
  createSession(relations, schema) {
52
- return new import_session.NeonSession(this.client, this.dialect, relations, schema, { logger: this.options.logger });
52
+ return new import_session.NeonSession(this.client, this.dialect, relations, schema, {
53
+ logger: this.options.logger,
54
+ cache: this.options.cache
55
+ });
53
56
  }
54
57
  }
55
58
  class NeonDatabase extends import_db.PgDatabase {
@@ -76,10 +79,14 @@ function construct(client, config = {}) {
76
79
  };
77
80
  }
78
81
  const relations = config.relations;
79
- const driver = new NeonDriver(client, dialect, { logger });
82
+ const driver = new NeonDriver(client, dialect, { logger, cache: config.cache });
80
83
  const session = driver.createSession(relations, schema);
81
84
  const db = new NeonDatabase(dialect, session, relations, schema);
82
85
  db.$client = client;
86
+ db.$cache = config.cache;
87
+ if (db.$cache) {
88
+ db.$cache["invalidate"] = config.cache?.onMutate;
89
+ }
83
90
  return db;
84
91
  }
85
92
  function drizzle(...params) {
@@ -94,8 +101,7 @@ function drizzle(...params) {
94
101
  if (ws) {
95
102
  import_serverless.neonConfig.webSocketConstructor = ws;
96
103
  }
97
- if (client)
98
- return construct(client, drizzleConfig);
104
+ if (client) return construct(client, drizzleConfig);
99
105
  const instance = typeof connection === "string" ? new import_serverless.Pool({
100
106
  connectionString: connection
101
107
  }) : new import_serverless.Pool(connection);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/neon-serverless/driver.ts"],"sourcesContent":["import { neonConfig, Pool, type PoolConfig } from '@neondatabase/serverless';\nimport * as V1 from '~/_relations.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 { AnyRelations, EmptyRelations, TablesRelationalConfig } from '~/relations.ts';\nimport { type DrizzleConfig, isConfig } from '~/utils.ts';\nimport type { NeonClient, NeonQueryResultHKT } from './session.ts';\nimport { NeonSession } from './session.ts';\n\nexport interface NeonDriverOptions {\n\tlogger?: Logger;\n}\n\nexport class NeonDriver {\n\tstatic readonly [entityKind]: string = 'NeonDriver';\n\n\tconstructor(\n\t\tprivate client: NeonClient,\n\t\tprivate dialect: PgDialect,\n\t\tprivate options: NeonDriverOptions = {},\n\t) {\n\t}\n\n\tcreateSession(\n\t\trelations: AnyRelations | undefined,\n\t\tschema: V1.RelationalSchemaConfig<V1.TablesRelationalConfig> | undefined,\n\t): NeonSession<Record<string, unknown>, AnyRelations, TablesRelationalConfig, V1.TablesRelationalConfig> {\n\t\treturn new NeonSession(this.client, this.dialect, relations, schema, { logger: this.options.logger });\n\t}\n}\n\nexport class NeonDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n> extends PgDatabase<NeonQueryResultHKT, TSchema, TRelations> {\n\tstatic override readonly [entityKind]: string = 'NeonServerlessDatabase';\n}\n\nfunction construct<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n\tTClient extends NeonClient = NeonClient,\n>(\n\tclient: TClient,\n\tconfig: DrizzleConfig<TSchema, TRelations> = {},\n): NeonDatabase<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\tconst driver = new NeonDriver(client, dialect, { logger });\n\tconst session = driver.createSession(relations, schema);\n\tconst db = new NeonDatabase(dialect, session, relations, schema as V1.RelationalSchemaConfig<any>) as NeonDatabase<\n\t\tTSchema\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 NeonClient = Pool,\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 | PoolConfig;\n\t\t\t} | {\n\t\t\t\tclient: TClient;\n\t\t\t})\n\t\t\t& {\n\t\t\t\tws?: any;\n\t\t\t}\n\t\t),\n\t]\n): NeonDatabase<TSchema, TRelations> & {\n\t$client: TClient;\n} {\n\tif (typeof params[0] === 'string') {\n\t\tconst instance = new Pool({\n\t\t\tconnectionString: params[0],\n\t\t});\n\n\t\treturn construct(instance, params[1]) as any;\n\t}\n\n\tif (isConfig(params[0])) {\n\t\tconst { connection, client, ws, ...drizzleConfig } = params[0] as {\n\t\t\tconnection?: PoolConfig | string;\n\t\t\tws?: any;\n\t\t\tclient?: TClient;\n\t\t} & DrizzleConfig<TSchema, TRelations>;\n\n\t\tif (ws) {\n\t\t\tneonConfig.webSocketConstructor = ws;\n\t\t}\n\n\t\tif (client) return construct(client, drizzleConfig);\n\n\t\tconst instance = typeof connection === 'string'\n\t\t\t? new Pool({\n\t\t\t\tconnectionString: connection,\n\t\t\t})\n\t\t\t: new Pool(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): NeonDatabase<TSchema> & {\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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAAkD;AAClD,SAAoB;AACpB,oBAA2B;AAE3B,oBAA8B;AAC9B,gBAA2B;AAC3B,qBAA0B;AAE1B,mBAA6C;AAE7C,qBAA4B;AAMrB,MAAM,WAAW;AAAA,EAGvB,YACS,QACA,SACA,UAA6B,CAAC,GACrC;AAHO;AACA;AACA;AAAA,EAET;AAAA,EAPA,QAAiB,wBAAU,IAAY;AAAA,EASvC,cACC,WACA,QACwG;AACxG,WAAO,IAAI,2BAAY,KAAK,QAAQ,KAAK,SAAS,WAAW,QAAQ,EAAE,QAAQ,KAAK,QAAQ,OAAO,CAAC;AAAA,EACrG;AACD;AAEO,MAAM,qBAGH,qBAAoD;AAAA,EAC7D,QAA0B,wBAAU,IAAY;AACjD;AAEA,SAAS,UAKR,QACA,SAA6C,CAAC,GAG7C;AACD,QAAM,UAAU,IAAI,yBAAU,EAAE,QAAQ,OAAO,OAAO,CAAC;AACvD,MAAI;AACJ,MAAI,OAAO,WAAW,MAAM;AAC3B,aAAS,IAAI,4BAAc;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;AACzB,QAAM,SAAS,IAAI,WAAW,QAAQ,SAAS,EAAE,OAAO,CAAC;AACzD,QAAM,UAAU,OAAO,cAAc,WAAW,MAAM;AACtD,QAAM,KAAK,IAAI,aAAa,SAAS,SAAS,WAAW,MAAwC;AAGjG,EAAO,GAAI,UAAU;AAErB,SAAO;AACR;AAEO,SAAS,WAKZ,QAoBF;AACD,MAAI,OAAO,OAAO,CAAC,MAAM,UAAU;AAClC,UAAM,WAAW,IAAI,uBAAK;AAAA,MACzB,kBAAkB,OAAO,CAAC;AAAA,IAC3B,CAAC;AAED,WAAO,UAAU,UAAU,OAAO,CAAC,CAAC;AAAA,EACrC;AAEA,UAAI,uBAAS,OAAO,CAAC,CAAC,GAAG;AACxB,UAAM,EAAE,YAAY,QAAQ,IAAI,GAAG,cAAc,IAAI,OAAO,CAAC;AAM7D,QAAI,IAAI;AACP,mCAAW,uBAAuB;AAAA,IACnC;AAEA,QAAI;AAAQ,aAAO,UAAU,QAAQ,aAAa;AAElD,UAAM,WAAW,OAAO,eAAe,WACpC,IAAI,uBAAK;AAAA,MACV,kBAAkB;AAAA,IACnB,CAAC,IACC,IAAI,uBAAK,UAAU;AAEtB,WAAO,UAAU,UAAU,aAAa;AAAA,EACzC;AAEA,SAAO,UAAU,OAAO,CAAC,GAAc,OAAO,CAAC,CAAmD;AACnG;AAAA,CAEO,CAAUA,aAAV;AACC,WAAS,KAIf,QAGC;AACD,WAAO,UAAU,CAAC,GAAU,MAAM;AAAA,EACnC;AATO,EAAAA,SAAS;AAAA,GADA;","names":["drizzle"]}
1
+ {"version":3,"sources":["../../src/neon-serverless/driver.ts"],"sourcesContent":["import { neonConfig, Pool, type PoolConfig } from '@neondatabase/serverless';\nimport * as V1 from '~/_relations.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 { AnyRelations, EmptyRelations, TablesRelationalConfig } from '~/relations.ts';\nimport { type DrizzleConfig, isConfig } from '~/utils.ts';\nimport type { NeonClient, NeonQueryResultHKT } from './session.ts';\nimport { NeonSession } from './session.ts';\n\nexport interface NeonDriverOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n}\n\nexport class NeonDriver {\n\tstatic readonly [entityKind]: string = 'NeonDriver';\n\n\tconstructor(\n\t\tprivate client: NeonClient,\n\t\tprivate dialect: PgDialect,\n\t\tprivate options: NeonDriverOptions = {},\n\t) {\n\t}\n\n\tcreateSession(\n\t\trelations: AnyRelations | undefined,\n\t\tschema: V1.RelationalSchemaConfig<V1.TablesRelationalConfig> | undefined,\n\t): NeonSession<Record<string, unknown>, AnyRelations, TablesRelationalConfig, V1.TablesRelationalConfig> {\n\t\treturn new NeonSession(this.client, this.dialect, relations, schema, {\n\t\t\tlogger: this.options.logger,\n\t\t\tcache: this.options.cache,\n\t\t});\n\t}\n}\n\nexport class NeonDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n> extends PgDatabase<NeonQueryResultHKT, TSchema, TRelations> {\n\tstatic override readonly [entityKind]: string = 'NeonServerlessDatabase';\n}\n\nfunction construct<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n\tTClient extends NeonClient = NeonClient,\n>(\n\tclient: TClient,\n\tconfig: DrizzleConfig<TSchema, TRelations> = {},\n): NeonDatabase<TSchema, TRelations> & {\n\t$client: NeonClient extends TClient ? Pool : 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\tconst driver = new NeonDriver(client, dialect, { logger, cache: config.cache });\n\tconst session = driver.createSession(relations, schema);\n\tconst db = new NeonDatabase(dialect, session, relations, schema as V1.RelationalSchemaConfig<any>) as NeonDatabase<\n\t\tTSchema\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 NeonClient = Pool,\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 | PoolConfig;\n\t\t\t} | {\n\t\t\t\tclient: TClient;\n\t\t\t})\n\t\t\t& {\n\t\t\t\tws?: any;\n\t\t\t}\n\t\t),\n\t]\n): NeonDatabase<TSchema, TRelations> & {\n\t$client: NeonClient extends TClient ? Pool : TClient;\n} {\n\tif (typeof params[0] === 'string') {\n\t\tconst instance = new Pool({\n\t\t\tconnectionString: params[0],\n\t\t});\n\n\t\treturn construct(instance, params[1]) as any;\n\t}\n\n\tif (isConfig(params[0])) {\n\t\tconst { connection, client, ws, ...drizzleConfig } = params[0] as {\n\t\t\tconnection?: PoolConfig | string;\n\t\t\tws?: any;\n\t\t\tclient?: TClient;\n\t\t} & DrizzleConfig<TSchema, TRelations>;\n\n\t\tif (ws) {\n\t\t\tneonConfig.webSocketConstructor = ws;\n\t\t}\n\n\t\tif (client) return construct(client, drizzleConfig);\n\n\t\tconst instance = typeof connection === 'string'\n\t\t\t? new Pool({\n\t\t\t\tconnectionString: connection,\n\t\t\t})\n\t\t\t: new Pool(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): NeonDatabase<TSchema> & {\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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAAkD;AAClD,SAAoB;AAEpB,oBAA2B;AAE3B,oBAA8B;AAC9B,gBAA2B;AAC3B,qBAA0B;AAE1B,mBAA6C;AAE7C,qBAA4B;AAOrB,MAAM,WAAW;AAAA,EAGvB,YACS,QACA,SACA,UAA6B,CAAC,GACrC;AAHO;AACA;AACA;AAAA,EAET;AAAA,EAPA,QAAiB,wBAAU,IAAY;AAAA,EASvC,cACC,WACA,QACwG;AACxG,WAAO,IAAI,2BAAY,KAAK,QAAQ,KAAK,SAAS,WAAW,QAAQ;AAAA,MACpE,QAAQ,KAAK,QAAQ;AAAA,MACrB,OAAO,KAAK,QAAQ;AAAA,IACrB,CAAC;AAAA,EACF;AACD;AAEO,MAAM,qBAGH,qBAAoD;AAAA,EAC7D,QAA0B,wBAAU,IAAY;AACjD;AAEA,SAAS,UAKR,QACA,SAA6C,CAAC,GAG7C;AACD,QAAM,UAAU,IAAI,yBAAU,EAAE,QAAQ,OAAO,OAAO,CAAC;AACvD,MAAI;AACJ,MAAI,OAAO,WAAW,MAAM;AAC3B,aAAS,IAAI,4BAAc;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;AACzB,QAAM,SAAS,IAAI,WAAW,QAAQ,SAAS,EAAE,QAAQ,OAAO,OAAO,MAAM,CAAC;AAC9E,QAAM,UAAU,OAAO,cAAc,WAAW,MAAM;AACtD,QAAM,KAAK,IAAI,aAAa,SAAS,SAAS,WAAW,MAAwC;AAGjG,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,QAoBF;AACD,MAAI,OAAO,OAAO,CAAC,MAAM,UAAU;AAClC,UAAM,WAAW,IAAI,uBAAK;AAAA,MACzB,kBAAkB,OAAO,CAAC;AAAA,IAC3B,CAAC;AAED,WAAO,UAAU,UAAU,OAAO,CAAC,CAAC;AAAA,EACrC;AAEA,UAAI,uBAAS,OAAO,CAAC,CAAC,GAAG;AACxB,UAAM,EAAE,YAAY,QAAQ,IAAI,GAAG,cAAc,IAAI,OAAO,CAAC;AAM7D,QAAI,IAAI;AACP,mCAAW,uBAAuB;AAAA,IACnC;AAEA,QAAI,OAAQ,QAAO,UAAU,QAAQ,aAAa;AAElD,UAAM,WAAW,OAAO,eAAe,WACpC,IAAI,uBAAK;AAAA,MACV,kBAAkB;AAAA,IACnB,CAAC,IACC,IAAI,uBAAK,UAAU;AAEtB,WAAO,UAAU,UAAU,aAAa;AAAA,EACzC;AAEA,SAAO,UAAU,OAAO,CAAC,GAAc,OAAO,CAAC,CAAmD;AACnG;AAAA,CAEO,CAAUA,aAAV;AACC,WAAS,KAIf,QAGC;AACD,WAAO,UAAU,CAAC,GAAU,MAAM;AAAA,EACnC;AATO,EAAAA,SAAS;AAAA,GADA;","names":["drizzle"]}
@@ -1,5 +1,6 @@
1
1
  import { Pool, type PoolConfig } from '@neondatabase/serverless';
2
2
  import * as V1 from "../_relations.cjs";
3
+ import type { Cache } from "../cache/core/cache.cjs";
3
4
  import { entityKind } from "../entity.cjs";
4
5
  import type { Logger } from "../logger.cjs";
5
6
  import { PgDatabase } from "../pg-core/db.cjs";
@@ -10,6 +11,7 @@ import type { NeonClient, NeonQueryResultHKT } from "./session.cjs";
10
11
  import { NeonSession } from "./session.cjs";
11
12
  export interface NeonDriverOptions {
12
13
  logger?: Logger;
14
+ cache?: Cache;
13
15
  }
14
16
  export declare class NeonDriver {
15
17
  private client;
@@ -36,7 +38,7 @@ export declare function drizzle<TSchema extends Record<string, unknown> = Record
36
38
  ws?: any;
37
39
  })
38
40
  ]): NeonDatabase<TSchema, TRelations> & {
39
- $client: TClient;
41
+ $client: NeonClient extends TClient ? Pool : TClient;
40
42
  };
41
43
  export declare namespace drizzle {
42
44
  function mock<TSchema extends Record<string, unknown> = Record<string, never>, TRelations extends AnyRelations = EmptyRelations>(config?: DrizzleConfig<TSchema, TRelations>): NeonDatabase<TSchema> & {
@@ -1,5 +1,6 @@
1
1
  import { Pool, type PoolConfig } from '@neondatabase/serverless';
2
2
  import * as V1 from "../_relations.js";
3
+ import type { Cache } from "../cache/core/cache.js";
3
4
  import { entityKind } from "../entity.js";
4
5
  import type { Logger } from "../logger.js";
5
6
  import { PgDatabase } from "../pg-core/db.js";
@@ -10,6 +11,7 @@ import type { NeonClient, NeonQueryResultHKT } from "./session.js";
10
11
  import { NeonSession } from "./session.js";
11
12
  export interface NeonDriverOptions {
12
13
  logger?: Logger;
14
+ cache?: Cache;
13
15
  }
14
16
  export declare class NeonDriver {
15
17
  private client;
@@ -36,7 +38,7 @@ export declare function drizzle<TSchema extends Record<string, unknown> = Record
36
38
  ws?: any;
37
39
  })
38
40
  ]): NeonDatabase<TSchema, TRelations> & {
39
- $client: TClient;
41
+ $client: NeonClient extends TClient ? Pool : TClient;
40
42
  };
41
43
  export declare namespace drizzle {
42
44
  function mock<TSchema extends Record<string, unknown> = Record<string, never>, TRelations extends AnyRelations = EmptyRelations>(config?: DrizzleConfig<TSchema, TRelations>): NeonDatabase<TSchema> & {
@@ -14,7 +14,10 @@ class NeonDriver {
14
14
  }
15
15
  static [entityKind] = "NeonDriver";
16
16
  createSession(relations, schema) {
17
- return new NeonSession(this.client, this.dialect, relations, schema, { logger: this.options.logger });
17
+ return new NeonSession(this.client, this.dialect, relations, schema, {
18
+ logger: this.options.logger,
19
+ cache: this.options.cache
20
+ });
18
21
  }
19
22
  }
20
23
  class NeonDatabase extends PgDatabase {
@@ -41,10 +44,14 @@ function construct(client, config = {}) {
41
44
  };
42
45
  }
43
46
  const relations = config.relations;
44
- const driver = new NeonDriver(client, dialect, { logger });
47
+ const driver = new NeonDriver(client, dialect, { logger, cache: config.cache });
45
48
  const session = driver.createSession(relations, schema);
46
49
  const db = new NeonDatabase(dialect, session, relations, schema);
47
50
  db.$client = client;
51
+ db.$cache = config.cache;
52
+ if (db.$cache) {
53
+ db.$cache["invalidate"] = config.cache?.onMutate;
54
+ }
48
55
  return db;
49
56
  }
50
57
  function drizzle(...params) {
@@ -59,8 +66,7 @@ function drizzle(...params) {
59
66
  if (ws) {
60
67
  neonConfig.webSocketConstructor = ws;
61
68
  }
62
- if (client)
63
- return construct(client, drizzleConfig);
69
+ if (client) return construct(client, drizzleConfig);
64
70
  const instance = typeof connection === "string" ? new Pool({
65
71
  connectionString: connection
66
72
  }) : new Pool(connection);