drizzle-orm 0.43.1-26a0497 → 0.43.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/aws-data-api/pg/driver.cjs +1 -5
- package/aws-data-api/pg/driver.cjs.map +1 -1
- package/aws-data-api/pg/driver.d.cts +0 -1
- package/aws-data-api/pg/driver.d.ts +0 -1
- package/aws-data-api/pg/driver.js +1 -5
- package/aws-data-api/pg/driver.js.map +1 -1
- package/aws-data-api/pg/session.cjs +4 -15
- package/aws-data-api/pg/session.cjs.map +1 -1
- package/aws-data-api/pg/session.d.cts +2 -13
- package/aws-data-api/pg/session.d.ts +2 -13
- package/aws-data-api/pg/session.js +4 -15
- package/aws-data-api/pg/session.js.map +1 -1
- package/better-sqlite3/driver.cjs.map +1 -1
- package/better-sqlite3/driver.js.map +1 -1
- package/better-sqlite3/session.cjs +3 -9
- package/better-sqlite3/session.cjs.map +1 -1
- package/better-sqlite3/session.d.cts +2 -12
- package/better-sqlite3/session.d.ts +2 -12
- package/better-sqlite3/session.js +3 -9
- package/better-sqlite3/session.js.map +1 -1
- package/bun-sql/driver.cjs +1 -5
- package/bun-sql/driver.cjs.map +1 -1
- package/bun-sql/driver.js +1 -5
- package/bun-sql/driver.js.map +1 -1
- package/bun-sql/session.cjs +9 -21
- package/bun-sql/session.cjs.map +1 -1
- package/bun-sql/session.d.cts +2 -12
- package/bun-sql/session.d.ts +2 -12
- package/bun-sql/session.js +9 -21
- package/bun-sql/session.js.map +1 -1
- package/d1/driver.cjs +1 -5
- package/d1/driver.cjs.map +1 -1
- package/d1/driver.js +1 -5
- package/d1/driver.js.map +1 -1
- package/d1/session.cjs +9 -23
- package/d1/session.cjs.map +1 -1
- package/d1/session.d.cts +2 -12
- package/d1/session.d.ts +2 -12
- package/d1/session.js +9 -23
- package/d1/session.js.map +1 -1
- package/durable-sqlite/session.cjs +1 -1
- package/durable-sqlite/session.cjs.map +1 -1
- package/durable-sqlite/session.js +1 -1
- package/durable-sqlite/session.js.map +1 -1
- package/gel/driver.cjs +2 -9
- package/gel/driver.cjs.map +1 -1
- package/gel/driver.d.cts +0 -2
- package/gel/driver.d.ts +0 -2
- package/gel/driver.js +2 -9
- package/gel/driver.js.map +1 -1
- package/gel/session.cjs +10 -25
- package/gel/session.cjs.map +1 -1
- package/gel/session.d.cts +2 -12
- package/gel/session.d.ts +2 -12
- package/gel/session.js +10 -25
- package/gel/session.js.map +1 -1
- package/gel-core/db.cjs +0 -1
- package/gel-core/db.cjs.map +1 -1
- package/gel-core/db.d.cts +0 -4
- package/gel-core/db.d.ts +0 -4
- package/gel-core/db.js +0 -1
- package/gel-core/db.js.map +1 -1
- package/gel-core/query-builders/delete.cjs +1 -5
- package/gel-core/query-builders/delete.cjs.map +1 -1
- package/gel-core/query-builders/delete.js +1 -5
- package/gel-core/query-builders/delete.js.map +1 -1
- package/gel-core/query-builders/insert.cjs +1 -5
- package/gel-core/query-builders/insert.cjs.map +1 -1
- package/gel-core/query-builders/insert.js +1 -5
- package/gel-core/query-builders/insert.js.map +1 -1
- package/gel-core/query-builders/select.cjs +4 -29
- package/gel-core/query-builders/select.cjs.map +1 -1
- package/gel-core/query-builders/select.d.cts +0 -9
- package/gel-core/query-builders/select.d.ts +0 -9
- package/gel-core/query-builders/select.js +4 -29
- package/gel-core/query-builders/select.js.map +1 -1
- package/gel-core/query-builders/update.cjs +1 -5
- package/gel-core/query-builders/update.cjs.map +1 -1
- package/gel-core/query-builders/update.js +1 -5
- package/gel-core/query-builders/update.js.map +1 -1
- package/gel-core/session.cjs +1 -52
- package/gel-core/session.cjs.map +1 -1
- package/gel-core/session.d.cts +3 -14
- package/gel-core/session.d.ts +3 -14
- package/gel-core/session.js +2 -53
- package/gel-core/session.js.map +1 -1
- package/gel-core/utils.cjs +0 -16
- package/gel-core/utils.cjs.map +1 -1
- package/gel-core/utils.d.cts +4 -8
- package/gel-core/utils.d.ts +4 -8
- package/gel-core/utils.js +0 -15
- package/gel-core/utils.js.map +1 -1
- package/libsql/driver-core.cjs +1 -5
- package/libsql/driver-core.cjs.map +1 -1
- package/libsql/driver-core.js +1 -5
- package/libsql/driver-core.js.map +1 -1
- package/libsql/session.cjs +13 -27
- package/libsql/session.cjs.map +1 -1
- package/libsql/session.d.cts +2 -12
- package/libsql/session.d.ts +2 -12
- package/libsql/session.js +13 -27
- package/libsql/session.js.map +1 -1
- package/mysql-core/db.cjs +0 -1
- package/mysql-core/db.cjs.map +1 -1
- package/mysql-core/db.d.cts +0 -4
- package/mysql-core/db.d.ts +0 -4
- package/mysql-core/db.js +0 -1
- package/mysql-core/db.js.map +1 -1
- package/mysql-core/query-builders/delete.cjs +1 -9
- package/mysql-core/query-builders/delete.cjs.map +1 -1
- package/mysql-core/query-builders/delete.js +1 -9
- package/mysql-core/query-builders/delete.js.map +1 -1
- package/mysql-core/query-builders/insert.cjs +1 -8
- package/mysql-core/query-builders/insert.cjs.map +1 -1
- package/mysql-core/query-builders/insert.d.cts +0 -2
- package/mysql-core/query-builders/insert.d.ts +0 -2
- package/mysql-core/query-builders/insert.js +1 -8
- package/mysql-core/query-builders/insert.js.map +1 -1
- package/mysql-core/query-builders/select.cjs +3 -27
- package/mysql-core/query-builders/select.cjs.map +1 -1
- package/mysql-core/query-builders/select.d.cts +0 -9
- package/mysql-core/query-builders/select.d.ts +0 -9
- package/mysql-core/query-builders/select.js +4 -28
- package/mysql-core/query-builders/select.js.map +1 -1
- package/mysql-core/query-builders/update.cjs +1 -11
- package/mysql-core/query-builders/update.cjs.map +1 -1
- package/mysql-core/query-builders/update.d.cts +0 -2
- package/mysql-core/query-builders/update.d.ts +0 -2
- package/mysql-core/query-builders/update.js +1 -11
- package/mysql-core/query-builders/update.js.map +1 -1
- package/mysql-core/session.cjs +0 -53
- package/mysql-core/session.cjs.map +1 -1
- package/mysql-core/session.d.cts +2 -15
- package/mysql-core/session.d.ts +2 -15
- package/mysql-core/session.js +1 -54
- package/mysql-core/session.js.map +1 -1
- package/mysql-core/utils.cjs +0 -16
- package/mysql-core/utils.cjs.map +1 -1
- package/mysql-core/utils.d.cts +2 -6
- package/mysql-core/utils.d.ts +2 -6
- package/mysql-core/utils.js +0 -15
- package/mysql-core/utils.js.map +1 -1
- package/mysql-proxy/session.cjs +5 -15
- package/mysql-proxy/session.cjs.map +1 -1
- package/mysql-proxy/session.d.cts +2 -12
- package/mysql-proxy/session.d.ts +2 -12
- package/mysql-proxy/session.js +5 -15
- package/mysql-proxy/session.js.map +1 -1
- package/mysql2/driver.cjs +2 -10
- package/mysql2/driver.cjs.map +1 -1
- package/mysql2/driver.d.cts +0 -2
- package/mysql2/driver.d.ts +0 -2
- package/mysql2/driver.js +2 -10
- package/mysql2/driver.js.map +1 -1
- package/mysql2/session.cjs +5 -15
- package/mysql2/session.cjs.map +1 -1
- package/mysql2/session.d.cts +2 -12
- package/mysql2/session.d.ts +2 -12
- package/mysql2/session.js +5 -15
- package/mysql2/session.js.map +1 -1
- package/neon-http/driver.cjs +2 -9
- package/neon-http/driver.cjs.map +1 -1
- package/neon-http/driver.d.cts +0 -2
- package/neon-http/driver.d.ts +0 -2
- package/neon-http/driver.js +2 -9
- package/neon-http/driver.js.map +1 -1
- package/neon-http/session.cjs +15 -25
- package/neon-http/session.cjs.map +1 -1
- package/neon-http/session.d.cts +2 -12
- package/neon-http/session.d.ts +2 -12
- package/neon-http/session.js +15 -25
- package/neon-http/session.js.map +1 -1
- package/neon-serverless/driver.cjs +2 -9
- package/neon-serverless/driver.cjs.map +1 -1
- package/neon-serverless/driver.d.cts +0 -2
- package/neon-serverless/driver.d.ts +0 -2
- package/neon-serverless/driver.js +2 -9
- package/neon-serverless/driver.js.map +1 -1
- package/neon-serverless/session.cjs +7 -21
- package/neon-serverless/session.cjs.map +1 -1
- package/neon-serverless/session.d.cts +2 -12
- package/neon-serverless/session.d.ts +2 -12
- package/neon-serverless/session.js +7 -21
- package/neon-serverless/session.js.map +1 -1
- package/node-postgres/driver.cjs +2 -9
- package/node-postgres/driver.cjs.map +1 -1
- package/node-postgres/driver.d.cts +0 -2
- package/node-postgres/driver.d.ts +0 -2
- package/node-postgres/driver.js +2 -9
- package/node-postgres/driver.js.map +1 -1
- package/node-postgres/session.cjs +6 -19
- package/node-postgres/session.cjs.map +1 -1
- package/node-postgres/session.d.cts +2 -13
- package/node-postgres/session.d.ts +2 -13
- package/node-postgres/session.js +6 -19
- package/node-postgres/session.js.map +1 -1
- package/op-sqlite/driver.cjs +1 -5
- package/op-sqlite/driver.cjs.map +1 -1
- package/op-sqlite/driver.js +1 -5
- package/op-sqlite/driver.js.map +1 -1
- package/op-sqlite/session.cjs +9 -23
- package/op-sqlite/session.cjs.map +1 -1
- package/op-sqlite/session.d.cts +2 -12
- package/op-sqlite/session.d.ts +2 -12
- package/op-sqlite/session.js +9 -23
- package/op-sqlite/session.js.map +1 -1
- package/package.json +4 -69
- package/pg-core/db.cjs +0 -1
- package/pg-core/db.cjs.map +1 -1
- package/pg-core/db.d.cts +0 -4
- package/pg-core/db.d.ts +0 -4
- package/pg-core/db.js +0 -1
- package/pg-core/db.js.map +1 -1
- package/pg-core/query-builders/delete.cjs +1 -6
- package/pg-core/query-builders/delete.cjs.map +1 -1
- package/pg-core/query-builders/delete.d.cts +1 -3
- package/pg-core/query-builders/delete.d.ts +1 -3
- package/pg-core/query-builders/delete.js +1 -6
- package/pg-core/query-builders/delete.js.map +1 -1
- package/pg-core/query-builders/insert.cjs +1 -6
- package/pg-core/query-builders/insert.cjs.map +1 -1
- package/pg-core/query-builders/insert.d.cts +0 -2
- package/pg-core/query-builders/insert.d.ts +0 -2
- package/pg-core/query-builders/insert.js +1 -6
- package/pg-core/query-builders/insert.js.map +1 -1
- package/pg-core/query-builders/select.cjs +5 -31
- package/pg-core/query-builders/select.cjs.map +1 -1
- package/pg-core/query-builders/select.d.cts +6 -15
- package/pg-core/query-builders/select.d.ts +6 -15
- package/pg-core/query-builders/select.js +5 -31
- package/pg-core/query-builders/select.js.map +1 -1
- package/pg-core/query-builders/update.cjs +1 -6
- package/pg-core/query-builders/update.cjs.map +1 -1
- package/pg-core/query-builders/update.d.cts +2 -4
- package/pg-core/query-builders/update.d.ts +2 -4
- package/pg-core/query-builders/update.js +1 -6
- package/pg-core/query-builders/update.js.map +1 -1
- package/pg-core/session.cjs +1 -52
- package/pg-core/session.cjs.map +1 -1
- package/pg-core/session.d.cts +3 -14
- package/pg-core/session.d.ts +3 -14
- package/pg-core/session.js +2 -53
- package/pg-core/session.js.map +1 -1
- package/pg-core/utils.cjs +0 -16
- package/pg-core/utils.cjs.map +1 -1
- package/pg-core/utils.d.cts +4 -8
- package/pg-core/utils.d.ts +4 -8
- package/pg-core/utils.js +1 -16
- package/pg-core/utils.js.map +1 -1
- package/pg-proxy/driver.cjs +2 -7
- package/pg-proxy/driver.cjs.map +1 -1
- package/pg-proxy/driver.js +2 -7
- package/pg-proxy/driver.js.map +1 -1
- package/pg-proxy/session.cjs +5 -15
- package/pg-proxy/session.cjs.map +1 -1
- package/pg-proxy/session.d.cts +2 -12
- package/pg-proxy/session.d.ts +2 -12
- package/pg-proxy/session.js +5 -15
- package/pg-proxy/session.js.map +1 -1
- package/pglite/driver.cjs +2 -9
- package/pglite/driver.cjs.map +1 -1
- package/pglite/driver.d.cts +0 -2
- package/pglite/driver.d.ts +0 -2
- package/pglite/driver.js +2 -9
- package/pglite/driver.js.map +1 -1
- package/pglite/session.cjs +7 -19
- package/pglite/session.cjs.map +1 -1
- package/pglite/session.d.cts +2 -12
- package/pglite/session.d.ts +2 -12
- package/pglite/session.js +7 -19
- package/pglite/session.js.map +1 -1
- package/planetscale-serverless/driver.cjs +1 -5
- package/planetscale-serverless/driver.cjs.map +1 -1
- package/planetscale-serverless/driver.d.cts +0 -1
- package/planetscale-serverless/driver.d.ts +0 -1
- package/planetscale-serverless/driver.js +1 -5
- package/planetscale-serverless/driver.js.map +1 -1
- package/planetscale-serverless/session.cjs +5 -15
- package/planetscale-serverless/session.cjs.map +1 -1
- package/planetscale-serverless/session.d.cts +2 -12
- package/planetscale-serverless/session.d.ts +2 -12
- package/planetscale-serverless/session.js +5 -15
- package/planetscale-serverless/session.js.map +1 -1
- package/postgres-js/driver.cjs +1 -5
- package/postgres-js/driver.cjs.map +1 -1
- package/postgres-js/driver.js +1 -5
- package/postgres-js/driver.js.map +1 -1
- package/postgres-js/session.cjs +6 -18
- package/postgres-js/session.cjs.map +1 -1
- package/postgres-js/session.d.cts +2 -12
- package/postgres-js/session.d.ts +2 -12
- package/postgres-js/session.js +6 -18
- package/postgres-js/session.js.map +1 -1
- package/prisma/mysql/session.cjs +1 -1
- package/prisma/mysql/session.cjs.map +1 -1
- package/prisma/mysql/session.js +1 -1
- package/prisma/mysql/session.js.map +1 -1
- package/prisma/pg/session.cjs +1 -1
- package/prisma/pg/session.cjs.map +1 -1
- package/prisma/pg/session.js +1 -1
- package/prisma/pg/session.js.map +1 -1
- package/query-builders/query-builder.cjs.map +1 -1
- package/query-builders/query-builder.d.cts +1 -2
- package/query-builders/query-builder.d.ts +1 -2
- package/query-builders/query-builder.js.map +1 -1
- package/singlestore/driver.cjs +2 -12
- package/singlestore/driver.cjs.map +1 -1
- package/singlestore/driver.d.cts +0 -2
- package/singlestore/driver.d.ts +0 -2
- package/singlestore/driver.js +2 -12
- package/singlestore/driver.js.map +1 -1
- package/singlestore/session.cjs +5 -15
- package/singlestore/session.cjs.map +1 -1
- package/singlestore/session.d.cts +2 -12
- package/singlestore/session.d.ts +2 -12
- package/singlestore/session.js +5 -15
- package/singlestore/session.js.map +1 -1
- package/singlestore-core/db.cjs +0 -1
- package/singlestore-core/db.cjs.map +1 -1
- package/singlestore-core/db.d.cts +0 -4
- package/singlestore-core/db.d.ts +0 -4
- package/singlestore-core/db.js +0 -1
- package/singlestore-core/db.js.map +1 -1
- package/singlestore-core/query-builders/delete.cjs +1 -9
- package/singlestore-core/query-builders/delete.cjs.map +1 -1
- package/singlestore-core/query-builders/delete.js +1 -9
- package/singlestore-core/query-builders/delete.js.map +1 -1
- package/singlestore-core/query-builders/insert.cjs +1 -6
- package/singlestore-core/query-builders/insert.cjs.map +1 -1
- package/singlestore-core/query-builders/insert.js +1 -6
- package/singlestore-core/query-builders/insert.js.map +1 -1
- package/singlestore-core/query-builders/select.cjs +3 -28
- package/singlestore-core/query-builders/select.cjs.map +1 -1
- package/singlestore-core/query-builders/select.d.cts +0 -9
- package/singlestore-core/query-builders/select.d.ts +0 -9
- package/singlestore-core/query-builders/select.js +3 -28
- package/singlestore-core/query-builders/select.js.map +1 -1
- package/singlestore-core/query-builders/update.cjs +1 -9
- package/singlestore-core/query-builders/update.cjs.map +1 -1
- package/singlestore-core/query-builders/update.js +1 -9
- package/singlestore-core/query-builders/update.js.map +1 -1
- package/singlestore-core/session.cjs +0 -53
- package/singlestore-core/session.cjs.map +1 -1
- package/singlestore-core/session.d.cts +2 -14
- package/singlestore-core/session.d.ts +2 -14
- package/singlestore-core/session.js +1 -54
- package/singlestore-core/session.js.map +1 -1
- package/singlestore-core/utils.cjs +0 -16
- package/singlestore-core/utils.cjs.map +1 -1
- package/singlestore-core/utils.d.cts +0 -3
- package/singlestore-core/utils.d.ts +0 -3
- package/singlestore-core/utils.js +0 -15
- package/singlestore-core/utils.js.map +1 -1
- package/sql/sql.cjs +0 -10
- package/sql/sql.cjs.map +1 -1
- package/sql/sql.js +0 -10
- package/sql/sql.js.map +1 -1
- package/sqlite-core/db.cjs +0 -1
- package/sqlite-core/db.cjs.map +1 -1
- package/sqlite-core/db.d.cts +0 -4
- package/sqlite-core/db.d.ts +0 -4
- package/sqlite-core/db.js +0 -1
- package/sqlite-core/db.js.map +1 -1
- package/sqlite-core/query-builders/delete.cjs +1 -7
- package/sqlite-core/query-builders/delete.cjs.map +1 -1
- package/sqlite-core/query-builders/delete.js +1 -7
- package/sqlite-core/query-builders/delete.js.map +1 -1
- package/sqlite-core/query-builders/insert.cjs +1 -7
- package/sqlite-core/query-builders/insert.cjs.map +1 -1
- package/sqlite-core/query-builders/insert.js +1 -7
- package/sqlite-core/query-builders/insert.js.map +1 -1
- package/sqlite-core/query-builders/select.cjs +3 -31
- package/sqlite-core/query-builders/select.cjs.map +1 -1
- package/sqlite-core/query-builders/select.d.cts +0 -9
- package/sqlite-core/query-builders/select.d.ts +0 -9
- package/sqlite-core/query-builders/select.js +3 -31
- package/sqlite-core/query-builders/select.js.map +1 -1
- package/sqlite-core/query-builders/update.cjs +1 -7
- package/sqlite-core/query-builders/update.cjs.map +1 -1
- package/sqlite-core/query-builders/update.js +1 -7
- package/sqlite-core/query-builders/update.js.map +1 -1
- package/sqlite-core/session.cjs +3 -62
- package/sqlite-core/session.cjs.map +1 -1
- package/sqlite-core/session.d.cts +4 -18
- package/sqlite-core/session.d.ts +4 -18
- package/sqlite-core/session.js +4 -63
- package/sqlite-core/session.js.map +1 -1
- package/sqlite-core/utils.cjs +0 -16
- package/sqlite-core/utils.cjs.map +1 -1
- package/sqlite-core/utils.d.cts +2 -6
- package/sqlite-core/utils.d.ts +2 -6
- package/sqlite-core/utils.js +0 -15
- package/sqlite-core/utils.js.map +1 -1
- package/sqlite-proxy/driver.cjs +2 -9
- package/sqlite-proxy/driver.cjs.map +1 -1
- package/sqlite-proxy/driver.js +2 -9
- package/sqlite-proxy/driver.js.map +1 -1
- package/sqlite-proxy/session.cjs +8 -22
- package/sqlite-proxy/session.cjs.map +1 -1
- package/sqlite-proxy/session.d.cts +2 -12
- package/sqlite-proxy/session.d.ts +2 -12
- package/sqlite-proxy/session.js +8 -22
- package/sqlite-proxy/session.js.map +1 -1
- package/subquery.cjs +3 -4
- package/subquery.cjs.map +1 -1
- package/subquery.d.cts +1 -2
- package/subquery.d.ts +1 -2
- package/subquery.js +3 -4
- package/subquery.js.map +1 -1
- package/tidb-serverless/driver.cjs +1 -5
- package/tidb-serverless/driver.cjs.map +1 -1
- package/tidb-serverless/driver.d.cts +0 -1
- package/tidb-serverless/driver.d.ts +0 -1
- package/tidb-serverless/driver.js +1 -5
- package/tidb-serverless/driver.js.map +1 -1
- package/tidb-serverless/session.cjs +5 -15
- package/tidb-serverless/session.cjs.map +1 -1
- package/tidb-serverless/session.d.cts +2 -12
- package/tidb-serverless/session.d.ts +2 -12
- package/tidb-serverless/session.js +5 -15
- package/tidb-serverless/session.js.map +1 -1
- package/utils.cjs +0 -22
- package/utils.cjs.map +1 -1
- package/utils.d.cts +0 -3
- package/utils.d.ts +0 -3
- package/utils.js +0 -11
- package/utils.js.map +1 -1
- package/vercel-postgres/driver.cjs +2 -9
- package/vercel-postgres/driver.cjs.map +1 -1
- package/vercel-postgres/driver.d.cts +0 -2
- package/vercel-postgres/driver.d.ts +0 -2
- package/vercel-postgres/driver.js +2 -9
- package/vercel-postgres/driver.js.map +1 -1
- package/vercel-postgres/session.cjs +7 -21
- package/vercel-postgres/session.cjs.map +1 -1
- package/vercel-postgres/session.d.cts +2 -12
- package/vercel-postgres/session.d.ts +2 -12
- package/vercel-postgres/session.js +7 -21
- package/vercel-postgres/session.js.map +1 -1
- package/version.cjs +1 -1
- package/version.d.cts +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
- package/xata-http/driver.cjs +2 -7
- package/xata-http/driver.cjs.map +1 -1
- package/xata-http/driver.d.cts +0 -2
- package/xata-http/driver.d.ts +0 -2
- package/xata-http/driver.js +2 -7
- package/xata-http/driver.js.map +1 -1
- package/xata-http/session.cjs +7 -21
- package/xata-http/session.cjs.map +1 -1
- package/xata-http/session.d.cts +2 -12
- package/xata-http/session.d.ts +2 -12
- package/xata-http/session.js +7 -21
- package/xata-http/session.js.map +1 -1
- package/cache/core/cache.cjs +0 -47
- package/cache/core/cache.cjs.map +0 -1
- package/cache/core/cache.d.cts +0 -35
- package/cache/core/cache.d.ts +0 -35
- package/cache/core/cache.js +0 -22
- package/cache/core/cache.js.map +0 -1
- package/cache/core/index.cjs +0 -23
- package/cache/core/index.cjs.map +0 -1
- package/cache/core/index.d.cts +0 -1
- package/cache/core/index.d.ts +0 -1
- package/cache/core/index.js +0 -2
- package/cache/core/index.js.map +0 -1
- package/cache/core/types.cjs +0 -17
- package/cache/core/types.cjs.map +0 -1
- package/cache/core/types.d.cts +0 -33
- package/cache/core/types.d.ts +0 -33
- package/cache/core/types.js +0 -1
- package/cache/core/types.js.map +0 -1
- package/cache/upstash/cache.cjs +0 -148
- package/cache/upstash/cache.cjs.map +0 -1
- package/cache/upstash/cache.d.cts +0 -29
- package/cache/upstash/cache.d.ts +0 -29
- package/cache/upstash/cache.js +0 -123
- package/cache/upstash/cache.js.map +0 -1
- package/cache/upstash/index.cjs +0 -23
- package/cache/upstash/index.cjs.map +0 -1
- package/cache/upstash/index.d.cts +0 -1
- package/cache/upstash/index.d.ts +0 -1
- package/cache/upstash/index.js +0 -2
- package/cache/upstash/index.js.map +0 -1
package/neon-http/driver.cjs
CHANGED
|
@@ -40,10 +40,7 @@ class NeonHttpDriver {
|
|
|
40
40
|
}
|
|
41
41
|
static [import_entity.entityKind] = "NeonHttpDriver";
|
|
42
42
|
createSession(schema) {
|
|
43
|
-
return new import_session.NeonHttpSession(this.client, this.dialect, schema, {
|
|
44
|
-
logger: this.options.logger,
|
|
45
|
-
cache: this.options.cache
|
|
46
|
-
});
|
|
43
|
+
return new import_session.NeonHttpSession(this.client, this.dialect, schema, { logger: this.options.logger });
|
|
47
44
|
}
|
|
48
45
|
initMappers() {
|
|
49
46
|
import_serverless.types.setTypeParser(import_serverless.types.builtins.TIMESTAMPTZ, (val) => val);
|
|
@@ -114,7 +111,7 @@ function construct(client, config = {}) {
|
|
|
114
111
|
tableNamesMap: tablesConfig.tableNamesMap
|
|
115
112
|
};
|
|
116
113
|
}
|
|
117
|
-
const driver = new NeonHttpDriver(client, dialect, { logger
|
|
114
|
+
const driver = new NeonHttpDriver(client, dialect, { logger });
|
|
118
115
|
const session = driver.createSession(schema);
|
|
119
116
|
const db = new NeonHttpDatabase(
|
|
120
117
|
dialect,
|
|
@@ -122,10 +119,6 @@ function construct(client, config = {}) {
|
|
|
122
119
|
schema
|
|
123
120
|
);
|
|
124
121
|
db.$client = client;
|
|
125
|
-
db.$cache = config.cache;
|
|
126
|
-
if (db.$cache) {
|
|
127
|
-
db.$cache["invalidate"] = config.cache?.onMutate;
|
|
128
|
-
}
|
|
129
122
|
return db;
|
|
130
123
|
}
|
|
131
124
|
function drizzle(...params) {
|
package/neon-http/driver.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/neon-http/driver.ts"],"sourcesContent":["import type { HTTPQueryOptions, HTTPTransactionOptions, NeonQueryFunction } from '@neondatabase/serverless';\nimport { neon, types } from '@neondatabase/serverless';\nimport type { BatchItem, BatchResponse } from '~/batch.ts';\nimport type { Cache } from '~/cache/core/cache.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { PgDatabase } from '~/pg-core/db.ts';\nimport { PgDialect } from '~/pg-core/dialect.ts';\nimport { createTableRelationsHelpers, extractTablesRelationalConfig } from '~/relations.ts';\nimport type { ExtractTablesWithRelations, RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { type DrizzleConfig, isConfig } from '~/utils.ts';\nimport { type NeonHttpClient, type NeonHttpQueryResultHKT, NeonHttpSession } from './session.ts';\n\nexport interface NeonDriverOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n}\n\nexport class NeonHttpDriver {\n\tstatic readonly [entityKind]: string = 'NeonHttpDriver';\n\n\tconstructor(\n\t\tprivate client: NeonHttpClient,\n\t\tprivate dialect: PgDialect,\n\t\tprivate options: NeonDriverOptions = {},\n\t) {\n\t\tthis.initMappers();\n\t}\n\n\tcreateSession(\n\t\tschema: RelationalSchemaConfig<TablesRelationalConfig> | undefined,\n\t): NeonHttpSession<Record<string, unknown>, TablesRelationalConfig> {\n\t\treturn new NeonHttpSession(this.client, this.dialect, schema, {\n\t\t\tlogger: this.options.logger,\n\t\t\tcache: this.options.cache,\n\t\t});\n\t}\n\n\tinitMappers() {\n\t\ttypes.setTypeParser(types.builtins.TIMESTAMPTZ, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.TIMESTAMP, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.DATE, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.INTERVAL, (val) => val);\n\t\ttypes.setTypeParser(1231, (val) => val);\n\t\ttypes.setTypeParser(1115, (val) => val);\n\t\ttypes.setTypeParser(1185, (val) => val);\n\t\ttypes.setTypeParser(1187, (val) => val);\n\t\ttypes.setTypeParser(1182, (val) => val);\n\t}\n}\n\nfunction wrap<T extends object>(\n\ttarget: T,\n\ttoken: Exclude<HTTPQueryOptions<true, true>['authToken'], undefined>,\n\tcb: (target: any, p: string | symbol, res: any) => any,\n\tdeep?: boolean,\n) {\n\treturn new Proxy(target, {\n\t\tget(target, p) {\n\t\t\tconst element = target[p as keyof typeof p];\n\t\t\tif (typeof element !== 'function' && (typeof element !== 'object' || element === null)) return element;\n\n\t\t\tif (deep) return wrap(element, token, cb);\n\t\t\tif (p === 'query') return wrap(element, token, cb, true);\n\n\t\t\treturn new Proxy(element as any, {\n\t\t\t\tapply(target, thisArg, argArray) {\n\t\t\t\t\tconst res = target.call(thisArg, ...argArray);\n\t\t\t\t\tif (typeof res === 'object' && res !== null && 'setToken' in res && typeof res.setToken === 'function') {\n\t\t\t\t\t\tres.setToken(token);\n\t\t\t\t\t}\n\t\t\t\t\treturn cb(target, p, res);\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t});\n}\n\nexport class NeonHttpDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> extends PgDatabase<NeonHttpQueryResultHKT, TSchema> {\n\tstatic override readonly [entityKind]: string = 'NeonHttpDatabase';\n\n\t$withAuth(\n\t\ttoken: Exclude<HTTPQueryOptions<true, true>['authToken'], undefined>,\n\t): Omit<\n\t\tthis,\n\t\tExclude<\n\t\t\tkeyof this,\n\t\t\t| '$count'\n\t\t\t| 'delete'\n\t\t\t| 'select'\n\t\t\t| 'selectDistinct'\n\t\t\t| 'selectDistinctOn'\n\t\t\t| 'update'\n\t\t\t| 'insert'\n\t\t\t| 'with'\n\t\t\t| 'query'\n\t\t\t| 'execute'\n\t\t\t| 'refreshMaterializedView'\n\t\t>\n\t> {\n\t\tthis.authToken = token;\n\n\t\treturn wrap(this, token, (target, p, res) => {\n\t\t\tif (p === 'with') {\n\t\t\t\treturn wrap(res, token, (_, __, res) => res);\n\t\t\t}\n\t\t\treturn res;\n\t\t});\n\t}\n\n\t/** @internal */\n\tdeclare readonly session: NeonHttpSession<TSchema, ExtractTablesWithRelations<TSchema>>;\n\n\tasync batch<U extends BatchItem<'pg'>, T extends Readonly<[U, ...U[]]>>(\n\t\tbatch: T,\n\t): Promise<BatchResponse<T>> {\n\t\treturn this.session.batch(batch) as Promise<BatchResponse<T>>;\n\t}\n}\n\nfunction construct<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends NeonQueryFunction<any, any> = NeonQueryFunction<any, any>,\n>(\n\tclient: TClient,\n\tconfig: DrizzleConfig<TSchema> = {},\n): NeonHttpDatabase<TSchema> & {\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: RelationalSchemaConfig<TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tconst tablesConfig = extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tcreateTableRelationsHelpers,\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 driver = new NeonHttpDriver(client, dialect, { logger, cache: config.cache });\n\tconst session = driver.createSession(schema);\n\n\tconst db = new NeonHttpDatabase(\n\t\tdialect,\n\t\tsession,\n\t\tschema as RelationalSchemaConfig<ExtractTablesWithRelations<TSchema>> | undefined,\n\t);\n\t(<any> db).$client = client;\n\t(<any> db).$cache = config.cache;\n\tif ((<any> db).$cache) {\n\t\t(<any> db).$cache['invalidate'] = config.cache?.onMutate;\n\t}\n\n\treturn db as any;\n}\n\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends NeonQueryFunction<any, any> = NeonQueryFunction<false, false>,\n>(\n\t...params: [\n\t\tTClient | string,\n\t] | [\n\t\tTClient | string,\n\t\tDrizzleConfig<TSchema>,\n\t] | [\n\t\t(\n\t\t\t& DrizzleConfig<TSchema>\n\t\t\t& ({\n\t\t\t\tconnection: string | ({ connectionString: string } & HTTPTransactionOptions<boolean, boolean>);\n\t\t\t} | {\n\t\t\t\tclient: TClient;\n\t\t\t})\n\t\t),\n\t]\n): NeonHttpDatabase<TSchema> & {\n\t$client: TClient;\n} {\n\tif (typeof params[0] === 'string') {\n\t\tconst instance = neon(params[0] as string);\n\t\treturn construct(instance, params[1]) as any;\n\t}\n\n\tif (isConfig(params[0])) {\n\t\tconst { connection, client, ...drizzleConfig } = params[0] as\n\t\t\t& {\n\t\t\t\tconnection?:\n\t\t\t\t\t| ({\n\t\t\t\t\t\tconnectionString: string;\n\t\t\t\t\t} & HTTPTransactionOptions<boolean, boolean>)\n\t\t\t\t\t| string;\n\t\t\t\tclient?: TClient;\n\t\t\t}\n\t\t\t& DrizzleConfig<TSchema>;\n\n\t\tif (client) return construct(client, drizzleConfig);\n\n\t\tif (typeof connection === 'object') {\n\t\t\tconst { connectionString, ...options } = connection;\n\n\t\t\tconst instance = neon(connectionString, options);\n\n\t\t\treturn construct(instance, drizzleConfig) as any;\n\t\t}\n\n\t\tconst instance = neon(connection!);\n\n\t\treturn construct(instance, drizzleConfig) as any;\n\t}\n\n\treturn construct(params[0] as TClient, params[1] as DrizzleConfig<TSchema> | undefined) as any;\n}\n\nexport namespace drizzle {\n\texport function mock<TSchema extends Record<string, unknown> = Record<string, never>>(\n\t\tconfig?: DrizzleConfig<TSchema>,\n\t): NeonHttpDatabase<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":"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","names":["target","res","instance","drizzle"]}
|
|
1
|
+
{"version":3,"sources":["../../src/neon-http/driver.ts"],"sourcesContent":["import type { HTTPQueryOptions, HTTPTransactionOptions, NeonQueryFunction } from '@neondatabase/serverless';\nimport { neon, types } from '@neondatabase/serverless';\nimport type { BatchItem, BatchResponse } from '~/batch.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { PgDatabase } from '~/pg-core/db.ts';\nimport { PgDialect } from '~/pg-core/dialect.ts';\nimport { createTableRelationsHelpers, extractTablesRelationalConfig } from '~/relations.ts';\nimport type { ExtractTablesWithRelations, RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { type DrizzleConfig, isConfig } from '~/utils.ts';\nimport { type NeonHttpClient, type NeonHttpQueryResultHKT, NeonHttpSession } from './session.ts';\n\nexport interface NeonDriverOptions {\n\tlogger?: Logger;\n}\n\nexport class NeonHttpDriver {\n\tstatic readonly [entityKind]: string = 'NeonHttpDriver';\n\n\tconstructor(\n\t\tprivate client: NeonHttpClient,\n\t\tprivate dialect: PgDialect,\n\t\tprivate options: NeonDriverOptions = {},\n\t) {\n\t\tthis.initMappers();\n\t}\n\n\tcreateSession(\n\t\tschema: RelationalSchemaConfig<TablesRelationalConfig> | undefined,\n\t): NeonHttpSession<Record<string, unknown>, TablesRelationalConfig> {\n\t\treturn new NeonHttpSession(this.client, this.dialect, schema, { logger: this.options.logger });\n\t}\n\n\tinitMappers() {\n\t\ttypes.setTypeParser(types.builtins.TIMESTAMPTZ, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.TIMESTAMP, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.DATE, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.INTERVAL, (val) => val);\n\t\ttypes.setTypeParser(1231, (val) => val);\n\t\ttypes.setTypeParser(1115, (val) => val);\n\t\ttypes.setTypeParser(1185, (val) => val);\n\t\ttypes.setTypeParser(1187, (val) => val);\n\t\ttypes.setTypeParser(1182, (val) => val);\n\t}\n}\n\nfunction wrap<T extends object>(\n\ttarget: T,\n\ttoken: Exclude<HTTPQueryOptions<true, true>['authToken'], undefined>,\n\tcb: (target: any, p: string | symbol, res: any) => any,\n\tdeep?: boolean,\n) {\n\treturn new Proxy(target, {\n\t\tget(target, p) {\n\t\t\tconst element = target[p as keyof typeof p];\n\t\t\tif (typeof element !== 'function' && (typeof element !== 'object' || element === null)) return element;\n\n\t\t\tif (deep) return wrap(element, token, cb);\n\t\t\tif (p === 'query') return wrap(element, token, cb, true);\n\n\t\t\treturn new Proxy(element as any, {\n\t\t\t\tapply(target, thisArg, argArray) {\n\t\t\t\t\tconst res = target.call(thisArg, ...argArray);\n\t\t\t\t\tif (typeof res === 'object' && res !== null && 'setToken' in res && typeof res.setToken === 'function') {\n\t\t\t\t\t\tres.setToken(token);\n\t\t\t\t\t}\n\t\t\t\t\treturn cb(target, p, res);\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t});\n}\n\nexport class NeonHttpDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> extends PgDatabase<NeonHttpQueryResultHKT, TSchema> {\n\tstatic override readonly [entityKind]: string = 'NeonHttpDatabase';\n\n\t$withAuth(\n\t\ttoken: Exclude<HTTPQueryOptions<true, true>['authToken'], undefined>,\n\t): Omit<\n\t\tthis,\n\t\tExclude<\n\t\t\tkeyof this,\n\t\t\t| '$count'\n\t\t\t| 'delete'\n\t\t\t| 'select'\n\t\t\t| 'selectDistinct'\n\t\t\t| 'selectDistinctOn'\n\t\t\t| 'update'\n\t\t\t| 'insert'\n\t\t\t| 'with'\n\t\t\t| 'query'\n\t\t\t| 'execute'\n\t\t\t| 'refreshMaterializedView'\n\t\t>\n\t> {\n\t\tthis.authToken = token;\n\n\t\treturn wrap(this, token, (target, p, res) => {\n\t\t\tif (p === 'with') {\n\t\t\t\treturn wrap(res, token, (_, __, res) => res);\n\t\t\t}\n\t\t\treturn res;\n\t\t});\n\t}\n\n\t/** @internal */\n\tdeclare readonly session: NeonHttpSession<TSchema, ExtractTablesWithRelations<TSchema>>;\n\n\tasync batch<U extends BatchItem<'pg'>, T extends Readonly<[U, ...U[]]>>(\n\t\tbatch: T,\n\t): Promise<BatchResponse<T>> {\n\t\treturn this.session.batch(batch) as Promise<BatchResponse<T>>;\n\t}\n}\n\nfunction construct<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends NeonQueryFunction<any, any> = NeonQueryFunction<any, any>,\n>(\n\tclient: TClient,\n\tconfig: DrizzleConfig<TSchema> = {},\n): NeonHttpDatabase<TSchema> & {\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: RelationalSchemaConfig<TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tconst tablesConfig = extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tcreateTableRelationsHelpers,\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 driver = new NeonHttpDriver(client, dialect, { logger });\n\tconst session = driver.createSession(schema);\n\n\tconst db = new NeonHttpDatabase(\n\t\tdialect,\n\t\tsession,\n\t\tschema as RelationalSchemaConfig<ExtractTablesWithRelations<TSchema>> | undefined,\n\t);\n\t(<any> db).$client = client;\n\n\treturn db as any;\n}\n\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends NeonQueryFunction<any, any> = NeonQueryFunction<false, false>,\n>(\n\t...params: [\n\t\tTClient | string,\n\t] | [\n\t\tTClient | string,\n\t\tDrizzleConfig<TSchema>,\n\t] | [\n\t\t(\n\t\t\t& DrizzleConfig<TSchema>\n\t\t\t& ({\n\t\t\t\tconnection: string | ({ connectionString: string } & HTTPTransactionOptions<boolean, boolean>);\n\t\t\t} | {\n\t\t\t\tclient: TClient;\n\t\t\t})\n\t\t),\n\t]\n): NeonHttpDatabase<TSchema> & {\n\t$client: TClient;\n} {\n\tif (typeof params[0] === 'string') {\n\t\tconst instance = neon(params[0] as string);\n\t\treturn construct(instance, params[1]) as any;\n\t}\n\n\tif (isConfig(params[0])) {\n\t\tconst { connection, client, ...drizzleConfig } = params[0] as\n\t\t\t& {\n\t\t\t\tconnection?:\n\t\t\t\t\t| ({\n\t\t\t\t\t\tconnectionString: string;\n\t\t\t\t\t} & HTTPTransactionOptions<boolean, boolean>)\n\t\t\t\t\t| string;\n\t\t\t\tclient?: TClient;\n\t\t\t}\n\t\t\t& DrizzleConfig<TSchema>;\n\n\t\tif (client) return construct(client, drizzleConfig);\n\n\t\tif (typeof connection === 'object') {\n\t\t\tconst { connectionString, ...options } = connection;\n\n\t\t\tconst instance = neon(connectionString, options);\n\n\t\t\treturn construct(instance, drizzleConfig) as any;\n\t\t}\n\n\t\tconst instance = neon(connection!);\n\n\t\treturn construct(instance, drizzleConfig) as any;\n\t}\n\n\treturn construct(params[0] as TClient, params[1] as DrizzleConfig<TSchema> | undefined) as any;\n}\n\nexport namespace drizzle {\n\texport function mock<TSchema extends Record<string, unknown> = Record<string, never>>(\n\t\tconfig?: DrizzleConfig<TSchema>,\n\t): NeonHttpDatabase<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":"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","names":["target","res","instance","drizzle"]}
|
package/neon-http/driver.d.cts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { HTTPQueryOptions, HTTPTransactionOptions, NeonQueryFunction } from '@neondatabase/serverless';
|
|
2
2
|
import type { BatchItem, BatchResponse } from "../batch.cjs";
|
|
3
|
-
import type { Cache } from "../cache/core/cache.cjs";
|
|
4
3
|
import { entityKind } from "../entity.cjs";
|
|
5
4
|
import type { Logger } from "../logger.cjs";
|
|
6
5
|
import { PgDatabase } from "../pg-core/db.cjs";
|
|
@@ -10,7 +9,6 @@ import { type DrizzleConfig } from "../utils.cjs";
|
|
|
10
9
|
import { type NeonHttpClient, type NeonHttpQueryResultHKT, NeonHttpSession } from "./session.cjs";
|
|
11
10
|
export interface NeonDriverOptions {
|
|
12
11
|
logger?: Logger;
|
|
13
|
-
cache?: Cache;
|
|
14
12
|
}
|
|
15
13
|
export declare class NeonHttpDriver {
|
|
16
14
|
private client;
|
package/neon-http/driver.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { HTTPQueryOptions, HTTPTransactionOptions, NeonQueryFunction } from '@neondatabase/serverless';
|
|
2
2
|
import type { BatchItem, BatchResponse } from "../batch.js";
|
|
3
|
-
import type { Cache } from "../cache/core/cache.js";
|
|
4
3
|
import { entityKind } from "../entity.js";
|
|
5
4
|
import type { Logger } from "../logger.js";
|
|
6
5
|
import { PgDatabase } from "../pg-core/db.js";
|
|
@@ -10,7 +9,6 @@ import { type DrizzleConfig } from "../utils.js";
|
|
|
10
9
|
import { type NeonHttpClient, type NeonHttpQueryResultHKT, NeonHttpSession } from "./session.js";
|
|
11
10
|
export interface NeonDriverOptions {
|
|
12
11
|
logger?: Logger;
|
|
13
|
-
cache?: Cache;
|
|
14
12
|
}
|
|
15
13
|
export declare class NeonHttpDriver {
|
|
16
14
|
private client;
|
package/neon-http/driver.js
CHANGED
|
@@ -15,10 +15,7 @@ class NeonHttpDriver {
|
|
|
15
15
|
}
|
|
16
16
|
static [entityKind] = "NeonHttpDriver";
|
|
17
17
|
createSession(schema) {
|
|
18
|
-
return new NeonHttpSession(this.client, this.dialect, schema, {
|
|
19
|
-
logger: this.options.logger,
|
|
20
|
-
cache: this.options.cache
|
|
21
|
-
});
|
|
18
|
+
return new NeonHttpSession(this.client, this.dialect, schema, { logger: this.options.logger });
|
|
22
19
|
}
|
|
23
20
|
initMappers() {
|
|
24
21
|
types.setTypeParser(types.builtins.TIMESTAMPTZ, (val) => val);
|
|
@@ -89,7 +86,7 @@ function construct(client, config = {}) {
|
|
|
89
86
|
tableNamesMap: tablesConfig.tableNamesMap
|
|
90
87
|
};
|
|
91
88
|
}
|
|
92
|
-
const driver = new NeonHttpDriver(client, dialect, { logger
|
|
89
|
+
const driver = new NeonHttpDriver(client, dialect, { logger });
|
|
93
90
|
const session = driver.createSession(schema);
|
|
94
91
|
const db = new NeonHttpDatabase(
|
|
95
92
|
dialect,
|
|
@@ -97,10 +94,6 @@ function construct(client, config = {}) {
|
|
|
97
94
|
schema
|
|
98
95
|
);
|
|
99
96
|
db.$client = client;
|
|
100
|
-
db.$cache = config.cache;
|
|
101
|
-
if (db.$cache) {
|
|
102
|
-
db.$cache["invalidate"] = config.cache?.onMutate;
|
|
103
|
-
}
|
|
104
97
|
return db;
|
|
105
98
|
}
|
|
106
99
|
function drizzle(...params) {
|
package/neon-http/driver.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/neon-http/driver.ts"],"sourcesContent":["import type { HTTPQueryOptions, HTTPTransactionOptions, NeonQueryFunction } from '@neondatabase/serverless';\nimport { neon, types } from '@neondatabase/serverless';\nimport type { BatchItem, BatchResponse } from '~/batch.ts';\nimport type { Cache } from '~/cache/core/cache.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { PgDatabase } from '~/pg-core/db.ts';\nimport { PgDialect } from '~/pg-core/dialect.ts';\nimport { createTableRelationsHelpers, extractTablesRelationalConfig } from '~/relations.ts';\nimport type { ExtractTablesWithRelations, RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { type DrizzleConfig, isConfig } from '~/utils.ts';\nimport { type NeonHttpClient, type NeonHttpQueryResultHKT, NeonHttpSession } from './session.ts';\n\nexport interface NeonDriverOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n}\n\nexport class NeonHttpDriver {\n\tstatic readonly [entityKind]: string = 'NeonHttpDriver';\n\n\tconstructor(\n\t\tprivate client: NeonHttpClient,\n\t\tprivate dialect: PgDialect,\n\t\tprivate options: NeonDriverOptions = {},\n\t) {\n\t\tthis.initMappers();\n\t}\n\n\tcreateSession(\n\t\tschema: RelationalSchemaConfig<TablesRelationalConfig> | undefined,\n\t): NeonHttpSession<Record<string, unknown>, TablesRelationalConfig> {\n\t\treturn new NeonHttpSession(this.client, this.dialect, schema, {\n\t\t\tlogger: this.options.logger,\n\t\t\tcache: this.options.cache,\n\t\t});\n\t}\n\n\tinitMappers() {\n\t\ttypes.setTypeParser(types.builtins.TIMESTAMPTZ, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.TIMESTAMP, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.DATE, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.INTERVAL, (val) => val);\n\t\ttypes.setTypeParser(1231, (val) => val);\n\t\ttypes.setTypeParser(1115, (val) => val);\n\t\ttypes.setTypeParser(1185, (val) => val);\n\t\ttypes.setTypeParser(1187, (val) => val);\n\t\ttypes.setTypeParser(1182, (val) => val);\n\t}\n}\n\nfunction wrap<T extends object>(\n\ttarget: T,\n\ttoken: Exclude<HTTPQueryOptions<true, true>['authToken'], undefined>,\n\tcb: (target: any, p: string | symbol, res: any) => any,\n\tdeep?: boolean,\n) {\n\treturn new Proxy(target, {\n\t\tget(target, p) {\n\t\t\tconst element = target[p as keyof typeof p];\n\t\t\tif (typeof element !== 'function' && (typeof element !== 'object' || element === null)) return element;\n\n\t\t\tif (deep) return wrap(element, token, cb);\n\t\t\tif (p === 'query') return wrap(element, token, cb, true);\n\n\t\t\treturn new Proxy(element as any, {\n\t\t\t\tapply(target, thisArg, argArray) {\n\t\t\t\t\tconst res = target.call(thisArg, ...argArray);\n\t\t\t\t\tif (typeof res === 'object' && res !== null && 'setToken' in res && typeof res.setToken === 'function') {\n\t\t\t\t\t\tres.setToken(token);\n\t\t\t\t\t}\n\t\t\t\t\treturn cb(target, p, res);\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t});\n}\n\nexport class NeonHttpDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> extends PgDatabase<NeonHttpQueryResultHKT, TSchema> {\n\tstatic override readonly [entityKind]: string = 'NeonHttpDatabase';\n\n\t$withAuth(\n\t\ttoken: Exclude<HTTPQueryOptions<true, true>['authToken'], undefined>,\n\t): Omit<\n\t\tthis,\n\t\tExclude<\n\t\t\tkeyof this,\n\t\t\t| '$count'\n\t\t\t| 'delete'\n\t\t\t| 'select'\n\t\t\t| 'selectDistinct'\n\t\t\t| 'selectDistinctOn'\n\t\t\t| 'update'\n\t\t\t| 'insert'\n\t\t\t| 'with'\n\t\t\t| 'query'\n\t\t\t| 'execute'\n\t\t\t| 'refreshMaterializedView'\n\t\t>\n\t> {\n\t\tthis.authToken = token;\n\n\t\treturn wrap(this, token, (target, p, res) => {\n\t\t\tif (p === 'with') {\n\t\t\t\treturn wrap(res, token, (_, __, res) => res);\n\t\t\t}\n\t\t\treturn res;\n\t\t});\n\t}\n\n\t/** @internal */\n\tdeclare readonly session: NeonHttpSession<TSchema, ExtractTablesWithRelations<TSchema>>;\n\n\tasync batch<U extends BatchItem<'pg'>, T extends Readonly<[U, ...U[]]>>(\n\t\tbatch: T,\n\t): Promise<BatchResponse<T>> {\n\t\treturn this.session.batch(batch) as Promise<BatchResponse<T>>;\n\t}\n}\n\nfunction construct<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends NeonQueryFunction<any, any> = NeonQueryFunction<any, any>,\n>(\n\tclient: TClient,\n\tconfig: DrizzleConfig<TSchema> = {},\n): NeonHttpDatabase<TSchema> & {\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: RelationalSchemaConfig<TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tconst tablesConfig = extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tcreateTableRelationsHelpers,\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 driver = new NeonHttpDriver(client, dialect, { logger, cache: config.cache });\n\tconst session = driver.createSession(schema);\n\n\tconst db = new NeonHttpDatabase(\n\t\tdialect,\n\t\tsession,\n\t\tschema as RelationalSchemaConfig<ExtractTablesWithRelations<TSchema>> | undefined,\n\t);\n\t(<any> db).$client = client;\n\t(<any> db).$cache = config.cache;\n\tif ((<any> db).$cache) {\n\t\t(<any> db).$cache['invalidate'] = config.cache?.onMutate;\n\t}\n\n\treturn db as any;\n}\n\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends NeonQueryFunction<any, any> = NeonQueryFunction<false, false>,\n>(\n\t...params: [\n\t\tTClient | string,\n\t] | [\n\t\tTClient | string,\n\t\tDrizzleConfig<TSchema>,\n\t] | [\n\t\t(\n\t\t\t& DrizzleConfig<TSchema>\n\t\t\t& ({\n\t\t\t\tconnection: string | ({ connectionString: string } & HTTPTransactionOptions<boolean, boolean>);\n\t\t\t} | {\n\t\t\t\tclient: TClient;\n\t\t\t})\n\t\t),\n\t]\n): NeonHttpDatabase<TSchema> & {\n\t$client: TClient;\n} {\n\tif (typeof params[0] === 'string') {\n\t\tconst instance = neon(params[0] as string);\n\t\treturn construct(instance, params[1]) as any;\n\t}\n\n\tif (isConfig(params[0])) {\n\t\tconst { connection, client, ...drizzleConfig } = params[0] as\n\t\t\t& {\n\t\t\t\tconnection?:\n\t\t\t\t\t| ({\n\t\t\t\t\t\tconnectionString: string;\n\t\t\t\t\t} & HTTPTransactionOptions<boolean, boolean>)\n\t\t\t\t\t| string;\n\t\t\t\tclient?: TClient;\n\t\t\t}\n\t\t\t& DrizzleConfig<TSchema>;\n\n\t\tif (client) return construct(client, drizzleConfig);\n\n\t\tif (typeof connection === 'object') {\n\t\t\tconst { connectionString, ...options } = connection;\n\n\t\t\tconst instance = neon(connectionString, options);\n\n\t\t\treturn construct(instance, drizzleConfig) as any;\n\t\t}\n\n\t\tconst instance = neon(connection!);\n\n\t\treturn construct(instance, drizzleConfig) as any;\n\t}\n\n\treturn construct(params[0] as TClient, params[1] as DrizzleConfig<TSchema> | undefined) as any;\n}\n\nexport namespace drizzle {\n\texport function mock<TSchema extends Record<string, unknown> = Record<string, never>>(\n\t\tconfig?: DrizzleConfig<TSchema>,\n\t): NeonHttpDatabase<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":"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","names":["target","res","instance","drizzle"]}
|
|
1
|
+
{"version":3,"sources":["../../src/neon-http/driver.ts"],"sourcesContent":["import type { HTTPQueryOptions, HTTPTransactionOptions, NeonQueryFunction } from '@neondatabase/serverless';\nimport { neon, types } from '@neondatabase/serverless';\nimport type { BatchItem, BatchResponse } from '~/batch.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { PgDatabase } from '~/pg-core/db.ts';\nimport { PgDialect } from '~/pg-core/dialect.ts';\nimport { createTableRelationsHelpers, extractTablesRelationalConfig } from '~/relations.ts';\nimport type { ExtractTablesWithRelations, RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { type DrizzleConfig, isConfig } from '~/utils.ts';\nimport { type NeonHttpClient, type NeonHttpQueryResultHKT, NeonHttpSession } from './session.ts';\n\nexport interface NeonDriverOptions {\n\tlogger?: Logger;\n}\n\nexport class NeonHttpDriver {\n\tstatic readonly [entityKind]: string = 'NeonHttpDriver';\n\n\tconstructor(\n\t\tprivate client: NeonHttpClient,\n\t\tprivate dialect: PgDialect,\n\t\tprivate options: NeonDriverOptions = {},\n\t) {\n\t\tthis.initMappers();\n\t}\n\n\tcreateSession(\n\t\tschema: RelationalSchemaConfig<TablesRelationalConfig> | undefined,\n\t): NeonHttpSession<Record<string, unknown>, TablesRelationalConfig> {\n\t\treturn new NeonHttpSession(this.client, this.dialect, schema, { logger: this.options.logger });\n\t}\n\n\tinitMappers() {\n\t\ttypes.setTypeParser(types.builtins.TIMESTAMPTZ, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.TIMESTAMP, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.DATE, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.INTERVAL, (val) => val);\n\t\ttypes.setTypeParser(1231, (val) => val);\n\t\ttypes.setTypeParser(1115, (val) => val);\n\t\ttypes.setTypeParser(1185, (val) => val);\n\t\ttypes.setTypeParser(1187, (val) => val);\n\t\ttypes.setTypeParser(1182, (val) => val);\n\t}\n}\n\nfunction wrap<T extends object>(\n\ttarget: T,\n\ttoken: Exclude<HTTPQueryOptions<true, true>['authToken'], undefined>,\n\tcb: (target: any, p: string | symbol, res: any) => any,\n\tdeep?: boolean,\n) {\n\treturn new Proxy(target, {\n\t\tget(target, p) {\n\t\t\tconst element = target[p as keyof typeof p];\n\t\t\tif (typeof element !== 'function' && (typeof element !== 'object' || element === null)) return element;\n\n\t\t\tif (deep) return wrap(element, token, cb);\n\t\t\tif (p === 'query') return wrap(element, token, cb, true);\n\n\t\t\treturn new Proxy(element as any, {\n\t\t\t\tapply(target, thisArg, argArray) {\n\t\t\t\t\tconst res = target.call(thisArg, ...argArray);\n\t\t\t\t\tif (typeof res === 'object' && res !== null && 'setToken' in res && typeof res.setToken === 'function') {\n\t\t\t\t\t\tres.setToken(token);\n\t\t\t\t\t}\n\t\t\t\t\treturn cb(target, p, res);\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t});\n}\n\nexport class NeonHttpDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> extends PgDatabase<NeonHttpQueryResultHKT, TSchema> {\n\tstatic override readonly [entityKind]: string = 'NeonHttpDatabase';\n\n\t$withAuth(\n\t\ttoken: Exclude<HTTPQueryOptions<true, true>['authToken'], undefined>,\n\t): Omit<\n\t\tthis,\n\t\tExclude<\n\t\t\tkeyof this,\n\t\t\t| '$count'\n\t\t\t| 'delete'\n\t\t\t| 'select'\n\t\t\t| 'selectDistinct'\n\t\t\t| 'selectDistinctOn'\n\t\t\t| 'update'\n\t\t\t| 'insert'\n\t\t\t| 'with'\n\t\t\t| 'query'\n\t\t\t| 'execute'\n\t\t\t| 'refreshMaterializedView'\n\t\t>\n\t> {\n\t\tthis.authToken = token;\n\n\t\treturn wrap(this, token, (target, p, res) => {\n\t\t\tif (p === 'with') {\n\t\t\t\treturn wrap(res, token, (_, __, res) => res);\n\t\t\t}\n\t\t\treturn res;\n\t\t});\n\t}\n\n\t/** @internal */\n\tdeclare readonly session: NeonHttpSession<TSchema, ExtractTablesWithRelations<TSchema>>;\n\n\tasync batch<U extends BatchItem<'pg'>, T extends Readonly<[U, ...U[]]>>(\n\t\tbatch: T,\n\t): Promise<BatchResponse<T>> {\n\t\treturn this.session.batch(batch) as Promise<BatchResponse<T>>;\n\t}\n}\n\nfunction construct<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends NeonQueryFunction<any, any> = NeonQueryFunction<any, any>,\n>(\n\tclient: TClient,\n\tconfig: DrizzleConfig<TSchema> = {},\n): NeonHttpDatabase<TSchema> & {\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: RelationalSchemaConfig<TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tconst tablesConfig = extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tcreateTableRelationsHelpers,\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 driver = new NeonHttpDriver(client, dialect, { logger });\n\tconst session = driver.createSession(schema);\n\n\tconst db = new NeonHttpDatabase(\n\t\tdialect,\n\t\tsession,\n\t\tschema as RelationalSchemaConfig<ExtractTablesWithRelations<TSchema>> | undefined,\n\t);\n\t(<any> db).$client = client;\n\n\treturn db as any;\n}\n\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends NeonQueryFunction<any, any> = NeonQueryFunction<false, false>,\n>(\n\t...params: [\n\t\tTClient | string,\n\t] | [\n\t\tTClient | string,\n\t\tDrizzleConfig<TSchema>,\n\t] | [\n\t\t(\n\t\t\t& DrizzleConfig<TSchema>\n\t\t\t& ({\n\t\t\t\tconnection: string | ({ connectionString: string } & HTTPTransactionOptions<boolean, boolean>);\n\t\t\t} | {\n\t\t\t\tclient: TClient;\n\t\t\t})\n\t\t),\n\t]\n): NeonHttpDatabase<TSchema> & {\n\t$client: TClient;\n} {\n\tif (typeof params[0] === 'string') {\n\t\tconst instance = neon(params[0] as string);\n\t\treturn construct(instance, params[1]) as any;\n\t}\n\n\tif (isConfig(params[0])) {\n\t\tconst { connection, client, ...drizzleConfig } = params[0] as\n\t\t\t& {\n\t\t\t\tconnection?:\n\t\t\t\t\t| ({\n\t\t\t\t\t\tconnectionString: string;\n\t\t\t\t\t} & HTTPTransactionOptions<boolean, boolean>)\n\t\t\t\t\t| string;\n\t\t\t\tclient?: TClient;\n\t\t\t}\n\t\t\t& DrizzleConfig<TSchema>;\n\n\t\tif (client) return construct(client, drizzleConfig);\n\n\t\tif (typeof connection === 'object') {\n\t\t\tconst { connectionString, ...options } = connection;\n\n\t\t\tconst instance = neon(connectionString, options);\n\n\t\t\treturn construct(instance, drizzleConfig) as any;\n\t\t}\n\n\t\tconst instance = neon(connection!);\n\n\t\treturn construct(instance, drizzleConfig) as any;\n\t}\n\n\treturn construct(params[0] as TClient, params[1] as DrizzleConfig<TSchema> | undefined) as any;\n}\n\nexport namespace drizzle {\n\texport function mock<TSchema extends Record<string, unknown> = Record<string, never>>(\n\t\tconfig?: DrizzleConfig<TSchema>,\n\t): NeonHttpDatabase<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":"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","names":["target","res","instance","drizzle"]}
|
package/neon-http/session.cjs
CHANGED
|
@@ -23,7 +23,6 @@ __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");
|
|
27
26
|
var import_entity = require("../entity.cjs");
|
|
28
27
|
var import_logger = require("../logger.cjs");
|
|
29
28
|
var import_pg_core = require("../pg-core/index.cjs");
|
|
@@ -39,8 +38,8 @@ const queryConfig = {
|
|
|
39
38
|
fullResults: true
|
|
40
39
|
};
|
|
41
40
|
class NeonHttpPreparedQuery extends import_session.PgPreparedQuery {
|
|
42
|
-
constructor(client, query, logger,
|
|
43
|
-
super(query
|
|
41
|
+
constructor(client, query, logger, fields, _isResponseInArrayMode, customResultMapper) {
|
|
42
|
+
super(query);
|
|
44
43
|
this.client = client;
|
|
45
44
|
this.logger = logger;
|
|
46
45
|
this.fields = fields;
|
|
@@ -56,27 +55,23 @@ class NeonHttpPreparedQuery extends import_session.PgPreparedQuery {
|
|
|
56
55
|
this.logger.logQuery(this.query.sql, params);
|
|
57
56
|
const { fields, clientQuery, query, customResultMapper } = this;
|
|
58
57
|
if (!fields && !customResultMapper) {
|
|
59
|
-
return
|
|
60
|
-
return clientQuery(
|
|
61
|
-
query.sql,
|
|
62
|
-
params,
|
|
63
|
-
token === void 0 ? rawQueryConfig : {
|
|
64
|
-
...rawQueryConfig,
|
|
65
|
-
authToken: token
|
|
66
|
-
}
|
|
67
|
-
);
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
const result = await this.queryWithCache(query.sql, params, async () => {
|
|
71
|
-
return await clientQuery(
|
|
58
|
+
return clientQuery(
|
|
72
59
|
query.sql,
|
|
73
60
|
params,
|
|
74
|
-
token === void 0 ?
|
|
75
|
-
...
|
|
61
|
+
token === void 0 ? rawQueryConfig : {
|
|
62
|
+
...rawQueryConfig,
|
|
76
63
|
authToken: token
|
|
77
64
|
}
|
|
78
65
|
);
|
|
79
|
-
}
|
|
66
|
+
}
|
|
67
|
+
const result = await clientQuery(
|
|
68
|
+
query.sql,
|
|
69
|
+
params,
|
|
70
|
+
token === void 0 ? queryConfig : {
|
|
71
|
+
...queryConfig,
|
|
72
|
+
authToken: token
|
|
73
|
+
}
|
|
74
|
+
);
|
|
80
75
|
return this.mapResult(result);
|
|
81
76
|
}
|
|
82
77
|
mapResult(result) {
|
|
@@ -120,20 +115,15 @@ class NeonHttpSession extends import_session.PgSession {
|
|
|
120
115
|
this.options = options;
|
|
121
116
|
this.clientQuery = client.query ?? client;
|
|
122
117
|
this.logger = options.logger ?? new import_logger.NoopLogger();
|
|
123
|
-
this.cache = options.cache ?? new import_core.NoopCache();
|
|
124
118
|
}
|
|
125
119
|
static [import_entity.entityKind] = "NeonHttpSession";
|
|
126
120
|
clientQuery;
|
|
127
121
|
logger;
|
|
128
|
-
|
|
129
|
-
prepareQuery(query, fields, name, isResponseInArrayMode, customResultMapper, queryMetadata, cacheConfig) {
|
|
122
|
+
prepareQuery(query, fields, name, isResponseInArrayMode, customResultMapper) {
|
|
130
123
|
return new NeonHttpPreparedQuery(
|
|
131
124
|
this.client,
|
|
132
125
|
query,
|
|
133
126
|
this.logger,
|
|
134
|
-
this.cache,
|
|
135
|
-
queryMetadata,
|
|
136
|
-
cacheConfig,
|
|
137
127
|
fields,
|
|
138
128
|
isResponseInArrayMode,
|
|
139
129
|
customResultMapper
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/neon-http/session.ts"],"sourcesContent":["import type { FullQueryResults, NeonQueryFunction, NeonQueryPromise } from '@neondatabase/serverless';\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 { RelationalSchemaConfig, 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<T extends PreparedQueryConfig> 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?: (rows: unknown[][]) => T['execute'],\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\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\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(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\tTSchema extends TablesRelationalConfig,\n> extends PgSession<NeonHttpQueryResultHKT, TFullSchema, 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 schema: 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\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, 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\tTSchema extends TablesRelationalConfig,\n> extends PgTransaction<NeonHttpQueryResultHKT, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'NeonHttpTransaction';\n\n\toverride async transaction<T>(_transaction: (tx: NeonTransaction<TFullSchema, TSchema>) => Promise<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.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 { 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 { RelationalSchemaConfig, 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<T extends PreparedQueryConfig> 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?: (rows: unknown[][]) => T['execute'],\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\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\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(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\tTSchema extends TablesRelationalConfig,\n> extends PgSession<NeonHttpQueryResultHKT, TFullSchema, 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 schema: 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\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, 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\tTSchema extends TablesRelationalConfig,\n> extends PgTransaction<NeonHttpQueryResultHKT, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'NeonHttpTransaction';\n\n\toverride async transaction<T>(_transaction: (tx: NeonTransaction<TFullSchema, TSchema>) => Promise<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.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":[]}
|
package/neon-http/session.d.cts
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import type { FullQueryResults, NeonQueryFunction } from '@neondatabase/serverless';
|
|
2
2
|
import type { BatchItem } from "../batch.cjs";
|
|
3
|
-
import { type Cache } from "../cache/core/index.cjs";
|
|
4
|
-
import type { WithCacheConfig } from "../cache/core/types.cjs";
|
|
5
3
|
import { entityKind } from "../entity.cjs";
|
|
6
4
|
import type { Logger } from "../logger.cjs";
|
|
7
5
|
import type { PgDialect } from "../pg-core/dialect.cjs";
|
|
@@ -20,10 +18,7 @@ export declare class NeonHttpPreparedQuery<T extends PreparedQueryConfig> extend
|
|
|
20
18
|
private customResultMapper?;
|
|
21
19
|
static readonly [entityKind]: string;
|
|
22
20
|
private clientQuery;
|
|
23
|
-
constructor(client: NeonHttpClient, query: Query, logger: Logger,
|
|
24
|
-
type: 'select' | 'update' | 'delete' | 'insert';
|
|
25
|
-
tables: string[];
|
|
26
|
-
} | undefined, cacheConfig: WithCacheConfig | undefined, fields: SelectedFieldsOrdered | undefined, _isResponseInArrayMode: boolean, customResultMapper?: ((rows: unknown[][]) => T["execute"]) | undefined);
|
|
21
|
+
constructor(client: NeonHttpClient, query: Query, logger: Logger, fields: SelectedFieldsOrdered | undefined, _isResponseInArrayMode: boolean, customResultMapper?: ((rows: unknown[][]) => T["execute"]) | undefined);
|
|
27
22
|
execute(placeholderValues: Record<string, unknown> | undefined): Promise<T['execute']>;
|
|
28
23
|
mapResult(result: unknown): unknown;
|
|
29
24
|
all(placeholderValues?: Record<string, unknown> | undefined): Promise<T['all']>;
|
|
@@ -31,7 +26,6 @@ export declare class NeonHttpPreparedQuery<T extends PreparedQueryConfig> extend
|
|
|
31
26
|
}
|
|
32
27
|
export interface NeonHttpSessionOptions {
|
|
33
28
|
logger?: Logger;
|
|
34
|
-
cache?: Cache;
|
|
35
29
|
}
|
|
36
30
|
export declare class NeonHttpSession<TFullSchema extends Record<string, unknown>, TSchema extends TablesRelationalConfig> extends PgSession<NeonHttpQueryResultHKT, TFullSchema, TSchema> {
|
|
37
31
|
private client;
|
|
@@ -40,12 +34,8 @@ export declare class NeonHttpSession<TFullSchema extends Record<string, unknown>
|
|
|
40
34
|
static readonly [entityKind]: string;
|
|
41
35
|
private clientQuery;
|
|
42
36
|
private logger;
|
|
43
|
-
private cache;
|
|
44
37
|
constructor(client: NeonHttpClient, dialect: PgDialect, schema: RelationalSchemaConfig<TSchema> | undefined, options?: NeonHttpSessionOptions);
|
|
45
|
-
prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(query: Query, fields: SelectedFieldsOrdered | undefined, name: string | undefined, isResponseInArrayMode: boolean, customResultMapper?: (rows: unknown[][]) => T['execute']
|
|
46
|
-
type: 'select' | 'update' | 'delete' | 'insert';
|
|
47
|
-
tables: string[];
|
|
48
|
-
}, cacheConfig?: WithCacheConfig): PgPreparedQuery<T>;
|
|
38
|
+
prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(query: Query, fields: SelectedFieldsOrdered | undefined, name: string | undefined, isResponseInArrayMode: boolean, customResultMapper?: (rows: unknown[][]) => T['execute']): PgPreparedQuery<T>;
|
|
49
39
|
batch<U extends BatchItem<'pg'>, T extends Readonly<[U, ...U[]]>>(queries: T): Promise<any>;
|
|
50
40
|
query(query: string, params: unknown[]): Promise<FullQueryResults<true>>;
|
|
51
41
|
queryObjects(query: string, params: unknown[]): Promise<FullQueryResults<false>>;
|
package/neon-http/session.d.ts
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import type { FullQueryResults, NeonQueryFunction } from '@neondatabase/serverless';
|
|
2
2
|
import type { BatchItem } from "../batch.js";
|
|
3
|
-
import { type Cache } from "../cache/core/index.js";
|
|
4
|
-
import type { WithCacheConfig } from "../cache/core/types.js";
|
|
5
3
|
import { entityKind } from "../entity.js";
|
|
6
4
|
import type { Logger } from "../logger.js";
|
|
7
5
|
import type { PgDialect } from "../pg-core/dialect.js";
|
|
@@ -20,10 +18,7 @@ export declare class NeonHttpPreparedQuery<T extends PreparedQueryConfig> extend
|
|
|
20
18
|
private customResultMapper?;
|
|
21
19
|
static readonly [entityKind]: string;
|
|
22
20
|
private clientQuery;
|
|
23
|
-
constructor(client: NeonHttpClient, query: Query, logger: Logger,
|
|
24
|
-
type: 'select' | 'update' | 'delete' | 'insert';
|
|
25
|
-
tables: string[];
|
|
26
|
-
} | undefined, cacheConfig: WithCacheConfig | undefined, fields: SelectedFieldsOrdered | undefined, _isResponseInArrayMode: boolean, customResultMapper?: ((rows: unknown[][]) => T["execute"]) | undefined);
|
|
21
|
+
constructor(client: NeonHttpClient, query: Query, logger: Logger, fields: SelectedFieldsOrdered | undefined, _isResponseInArrayMode: boolean, customResultMapper?: ((rows: unknown[][]) => T["execute"]) | undefined);
|
|
27
22
|
execute(placeholderValues: Record<string, unknown> | undefined): Promise<T['execute']>;
|
|
28
23
|
mapResult(result: unknown): unknown;
|
|
29
24
|
all(placeholderValues?: Record<string, unknown> | undefined): Promise<T['all']>;
|
|
@@ -31,7 +26,6 @@ export declare class NeonHttpPreparedQuery<T extends PreparedQueryConfig> extend
|
|
|
31
26
|
}
|
|
32
27
|
export interface NeonHttpSessionOptions {
|
|
33
28
|
logger?: Logger;
|
|
34
|
-
cache?: Cache;
|
|
35
29
|
}
|
|
36
30
|
export declare class NeonHttpSession<TFullSchema extends Record<string, unknown>, TSchema extends TablesRelationalConfig> extends PgSession<NeonHttpQueryResultHKT, TFullSchema, TSchema> {
|
|
37
31
|
private client;
|
|
@@ -40,12 +34,8 @@ export declare class NeonHttpSession<TFullSchema extends Record<string, unknown>
|
|
|
40
34
|
static readonly [entityKind]: string;
|
|
41
35
|
private clientQuery;
|
|
42
36
|
private logger;
|
|
43
|
-
private cache;
|
|
44
37
|
constructor(client: NeonHttpClient, dialect: PgDialect, schema: RelationalSchemaConfig<TSchema> | undefined, options?: NeonHttpSessionOptions);
|
|
45
|
-
prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(query: Query, fields: SelectedFieldsOrdered | undefined, name: string | undefined, isResponseInArrayMode: boolean, customResultMapper?: (rows: unknown[][]) => T['execute']
|
|
46
|
-
type: 'select' | 'update' | 'delete' | 'insert';
|
|
47
|
-
tables: string[];
|
|
48
|
-
}, cacheConfig?: WithCacheConfig): PgPreparedQuery<T>;
|
|
38
|
+
prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(query: Query, fields: SelectedFieldsOrdered | undefined, name: string | undefined, isResponseInArrayMode: boolean, customResultMapper?: (rows: unknown[][]) => T['execute']): PgPreparedQuery<T>;
|
|
49
39
|
batch<U extends BatchItem<'pg'>, T extends Readonly<[U, ...U[]]>>(queries: T): Promise<any>;
|
|
50
40
|
query(query: string, params: unknown[]): Promise<FullQueryResults<true>>;
|
|
51
41
|
queryObjects(query: string, params: unknown[]): Promise<FullQueryResults<false>>;
|
package/neon-http/session.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { NoopCache } from "../cache/core/index.js";
|
|
2
1
|
import { entityKind } from "../entity.js";
|
|
3
2
|
import { NoopLogger } from "../logger.js";
|
|
4
3
|
import { PgTransaction } from "../pg-core/index.js";
|
|
@@ -14,8 +13,8 @@ const queryConfig = {
|
|
|
14
13
|
fullResults: true
|
|
15
14
|
};
|
|
16
15
|
class NeonHttpPreparedQuery extends PgPreparedQuery {
|
|
17
|
-
constructor(client, query, logger,
|
|
18
|
-
super(query
|
|
16
|
+
constructor(client, query, logger, fields, _isResponseInArrayMode, customResultMapper) {
|
|
17
|
+
super(query);
|
|
19
18
|
this.client = client;
|
|
20
19
|
this.logger = logger;
|
|
21
20
|
this.fields = fields;
|
|
@@ -31,27 +30,23 @@ class NeonHttpPreparedQuery extends PgPreparedQuery {
|
|
|
31
30
|
this.logger.logQuery(this.query.sql, params);
|
|
32
31
|
const { fields, clientQuery, query, customResultMapper } = this;
|
|
33
32
|
if (!fields && !customResultMapper) {
|
|
34
|
-
return
|
|
35
|
-
return clientQuery(
|
|
36
|
-
query.sql,
|
|
37
|
-
params,
|
|
38
|
-
token === void 0 ? rawQueryConfig : {
|
|
39
|
-
...rawQueryConfig,
|
|
40
|
-
authToken: token
|
|
41
|
-
}
|
|
42
|
-
);
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
const result = await this.queryWithCache(query.sql, params, async () => {
|
|
46
|
-
return await clientQuery(
|
|
33
|
+
return clientQuery(
|
|
47
34
|
query.sql,
|
|
48
35
|
params,
|
|
49
|
-
token === void 0 ?
|
|
50
|
-
...
|
|
36
|
+
token === void 0 ? rawQueryConfig : {
|
|
37
|
+
...rawQueryConfig,
|
|
51
38
|
authToken: token
|
|
52
39
|
}
|
|
53
40
|
);
|
|
54
|
-
}
|
|
41
|
+
}
|
|
42
|
+
const result = await clientQuery(
|
|
43
|
+
query.sql,
|
|
44
|
+
params,
|
|
45
|
+
token === void 0 ? queryConfig : {
|
|
46
|
+
...queryConfig,
|
|
47
|
+
authToken: token
|
|
48
|
+
}
|
|
49
|
+
);
|
|
55
50
|
return this.mapResult(result);
|
|
56
51
|
}
|
|
57
52
|
mapResult(result) {
|
|
@@ -95,20 +90,15 @@ class NeonHttpSession extends PgSession {
|
|
|
95
90
|
this.options = options;
|
|
96
91
|
this.clientQuery = client.query ?? client;
|
|
97
92
|
this.logger = options.logger ?? new NoopLogger();
|
|
98
|
-
this.cache = options.cache ?? new NoopCache();
|
|
99
93
|
}
|
|
100
94
|
static [entityKind] = "NeonHttpSession";
|
|
101
95
|
clientQuery;
|
|
102
96
|
logger;
|
|
103
|
-
|
|
104
|
-
prepareQuery(query, fields, name, isResponseInArrayMode, customResultMapper, queryMetadata, cacheConfig) {
|
|
97
|
+
prepareQuery(query, fields, name, isResponseInArrayMode, customResultMapper) {
|
|
105
98
|
return new NeonHttpPreparedQuery(
|
|
106
99
|
this.client,
|
|
107
100
|
query,
|
|
108
101
|
this.logger,
|
|
109
|
-
this.cache,
|
|
110
|
-
queryMetadata,
|
|
111
|
-
cacheConfig,
|
|
112
102
|
fields,
|
|
113
103
|
isResponseInArrayMode,
|
|
114
104
|
customResultMapper
|
package/neon-http/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/neon-http/session.ts"],"sourcesContent":["import type { FullQueryResults, NeonQueryFunction, NeonQueryPromise } from '@neondatabase/serverless';\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 { RelationalSchemaConfig, 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<T extends PreparedQueryConfig> 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?: (rows: unknown[][]) => T['execute'],\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\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\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(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\tTSchema extends TablesRelationalConfig,\n> extends PgSession<NeonHttpQueryResultHKT, TFullSchema, 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 schema: 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\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, 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\tTSchema extends TablesRelationalConfig,\n> extends PgTransaction<NeonHttpQueryResultHKT, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'NeonHttpTransaction';\n\n\toverride async transaction<T>(_transaction: (tx: NeonTransaction<TFullSchema, TSchema>) => Promise<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.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 { 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 { RelationalSchemaConfig, 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<T extends PreparedQueryConfig> 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?: (rows: unknown[][]) => T['execute'],\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\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\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(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\tTSchema extends TablesRelationalConfig,\n> extends PgSession<NeonHttpQueryResultHKT, TFullSchema, 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 schema: 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\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, 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\tTSchema extends TablesRelationalConfig,\n> extends PgTransaction<NeonHttpQueryResultHKT, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'NeonHttpTransaction';\n\n\toverride async transaction<T>(_transaction: (tx: NeonTransaction<TFullSchema, TSchema>) => Promise<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.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":[]}
|
|
@@ -39,10 +39,7 @@ class NeonDriver {
|
|
|
39
39
|
}
|
|
40
40
|
static [import_entity.entityKind] = "NeonDriver";
|
|
41
41
|
createSession(schema) {
|
|
42
|
-
return new import_session.NeonSession(this.client, this.dialect, schema, {
|
|
43
|
-
logger: this.options.logger,
|
|
44
|
-
cache: this.options.cache
|
|
45
|
-
});
|
|
42
|
+
return new import_session.NeonSession(this.client, this.dialect, schema, { logger: this.options.logger });
|
|
46
43
|
}
|
|
47
44
|
}
|
|
48
45
|
class NeonDatabase extends import_db.PgDatabase {
|
|
@@ -68,14 +65,10 @@ function construct(client, config = {}) {
|
|
|
68
65
|
tableNamesMap: tablesConfig.tableNamesMap
|
|
69
66
|
};
|
|
70
67
|
}
|
|
71
|
-
const driver = new NeonDriver(client, dialect, { logger
|
|
68
|
+
const driver = new NeonDriver(client, dialect, { logger });
|
|
72
69
|
const session = driver.createSession(schema);
|
|
73
70
|
const db = new NeonDatabase(dialect, session, schema);
|
|
74
71
|
db.$client = client;
|
|
75
|
-
db.$cache = config.cache;
|
|
76
|
-
if (db.$cache) {
|
|
77
|
-
db.$cache["invalidate"] = config.cache?.onMutate;
|
|
78
|
-
}
|
|
79
72
|
return db;
|
|
80
73
|
}
|
|
81
74
|
function drizzle(...params) {
|