drizzle-orm 0.34.1-1f15bfd → 0.34.1-a9aca5c
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.map +1 -1
- package/aws-data-api/pg/driver.js.map +1 -1
- package/aws-data-api/pg/session.cjs.map +1 -1
- package/aws-data-api/pg/session.d.cts +1 -1
- package/aws-data-api/pg/session.d.ts +1 -1
- 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.map +1 -1
- package/better-sqlite3/session.js.map +1 -1
- package/bun-sqlite/driver.cjs.map +1 -1
- package/bun-sqlite/driver.d.cts +0 -1
- package/bun-sqlite/driver.d.ts +0 -1
- package/bun-sqlite/driver.js.map +1 -1
- package/bun-sqlite/session.cjs.map +1 -1
- package/bun-sqlite/session.d.cts +0 -1
- package/bun-sqlite/session.d.ts +0 -1
- package/bun-sqlite/session.js.map +1 -1
- package/column-builder.d.cts +4 -4
- package/column-builder.d.ts +4 -4
- package/d1/driver.cjs.map +1 -1
- package/d1/driver.d.cts +0 -1
- package/d1/driver.d.ts +0 -1
- package/d1/driver.js.map +1 -1
- package/d1/session.cjs.map +1 -1
- package/d1/session.d.cts +0 -1
- package/d1/session.d.ts +0 -1
- package/d1/session.js.map +1 -1
- package/errors.cjs.map +1 -1
- package/errors.js.map +1 -1
- package/expo-sqlite/driver.cjs.map +1 -1
- package/expo-sqlite/driver.js.map +1 -1
- package/expo-sqlite/session.cjs.map +1 -1
- package/expo-sqlite/session.js.map +1 -1
- package/libsql/driver.cjs.map +1 -1
- package/libsql/driver.js.map +1 -1
- package/libsql/session.cjs.map +1 -1
- package/libsql/session.js.map +1 -1
- package/monodriver.d.cts +0 -2
- package/monodriver.d.ts +0 -2
- package/mysql-core/columns/bigint.cjs.map +1 -1
- package/mysql-core/columns/bigint.js.map +1 -1
- package/mysql-core/columns/binary.cjs.map +1 -1
- package/mysql-core/columns/binary.js.map +1 -1
- package/mysql-core/columns/boolean.cjs.map +1 -1
- package/mysql-core/columns/boolean.js.map +1 -1
- package/mysql-core/columns/char.cjs.map +1 -1
- package/mysql-core/columns/char.js.map +1 -1
- package/mysql-core/columns/common.cjs.map +1 -1
- package/mysql-core/columns/common.js.map +1 -1
- package/mysql-core/columns/custom.cjs.map +1 -1
- package/mysql-core/columns/custom.js.map +1 -1
- package/mysql-core/columns/date.cjs.map +1 -1
- package/mysql-core/columns/date.common.cjs.map +1 -1
- package/mysql-core/columns/date.common.js.map +1 -1
- package/mysql-core/columns/date.js.map +1 -1
- package/mysql-core/columns/datetime.cjs.map +1 -1
- package/mysql-core/columns/datetime.js.map +1 -1
- package/mysql-core/columns/decimal.cjs.map +1 -1
- package/mysql-core/columns/decimal.js.map +1 -1
- package/mysql-core/columns/double.cjs.map +1 -1
- package/mysql-core/columns/double.js.map +1 -1
- package/mysql-core/columns/enum.cjs.map +1 -1
- package/mysql-core/columns/enum.js.map +1 -1
- package/mysql-core/columns/float.cjs.map +1 -1
- package/mysql-core/columns/float.js.map +1 -1
- package/mysql-core/columns/int.cjs.map +1 -1
- package/mysql-core/columns/int.js.map +1 -1
- package/mysql-core/columns/json.cjs.map +1 -1
- package/mysql-core/columns/json.js.map +1 -1
- package/mysql-core/columns/mediumint.cjs.map +1 -1
- package/mysql-core/columns/mediumint.js.map +1 -1
- package/mysql-core/columns/real.cjs.map +1 -1
- package/mysql-core/columns/real.js.map +1 -1
- package/mysql-core/columns/serial.cjs.map +1 -1
- package/mysql-core/columns/serial.js.map +1 -1
- package/mysql-core/columns/smallint.cjs.map +1 -1
- package/mysql-core/columns/smallint.js.map +1 -1
- package/mysql-core/columns/text.cjs.map +1 -1
- package/mysql-core/columns/text.js.map +1 -1
- package/mysql-core/columns/time.cjs.map +1 -1
- package/mysql-core/columns/time.js.map +1 -1
- package/mysql-core/columns/timestamp.cjs.map +1 -1
- package/mysql-core/columns/timestamp.js.map +1 -1
- package/mysql-core/columns/tinyint.cjs.map +1 -1
- package/mysql-core/columns/tinyint.js.map +1 -1
- package/mysql-core/columns/varbinary.cjs.map +1 -1
- package/mysql-core/columns/varbinary.js.map +1 -1
- package/mysql-core/columns/varchar.cjs.map +1 -1
- package/mysql-core/columns/varchar.js.map +1 -1
- package/mysql-core/columns/year.cjs.map +1 -1
- package/mysql-core/columns/year.js.map +1 -1
- package/mysql-core/db.d.cts +3 -3
- package/mysql-core/db.d.ts +3 -3
- package/mysql-core/query-builders/count.cjs.map +1 -1
- package/mysql-core/query-builders/count.js.map +1 -1
- package/mysql-core/query-builders/delete.cjs.map +1 -1
- package/mysql-core/query-builders/delete.js.map +1 -1
- package/mysql-core/query-builders/insert.cjs.map +1 -1
- package/mysql-core/query-builders/insert.js.map +1 -1
- package/mysql-core/query-builders/query-builder.d.cts +4 -4
- package/mysql-core/query-builders/query-builder.d.ts +4 -4
- package/mysql-core/query-builders/query.cjs.map +1 -1
- package/mysql-core/query-builders/query.d.cts +3 -7
- package/mysql-core/query-builders/query.d.ts +3 -7
- package/mysql-core/query-builders/query.js.map +1 -1
- package/mysql-core/query-builders/select.cjs.map +1 -1
- package/mysql-core/query-builders/select.js.map +1 -1
- package/mysql-core/query-builders/update.cjs.map +1 -1
- package/mysql-core/query-builders/update.d.cts +1 -1
- package/mysql-core/query-builders/update.d.ts +1 -1
- package/mysql-core/query-builders/update.js.map +1 -1
- package/mysql-core/session.cjs.map +1 -1
- package/mysql-core/session.js.map +1 -1
- package/mysql-core/table.cjs.map +1 -1
- package/mysql-core/table.js.map +1 -1
- package/mysql-core/utils.d.cts +5 -5
- package/mysql-core/utils.d.ts +5 -5
- package/mysql-core/view-base.cjs.map +1 -1
- package/mysql-core/view-base.js.map +1 -1
- package/mysql-core/view.cjs.map +1 -1
- package/mysql-core/view.js.map +1 -1
- package/mysql-proxy/driver.cjs.map +1 -1
- package/mysql-proxy/driver.js.map +1 -1
- package/mysql-proxy/session.cjs.map +1 -1
- package/mysql-proxy/session.d.cts +1 -1
- package/mysql-proxy/session.d.ts +1 -1
- package/mysql-proxy/session.js.map +1 -1
- package/mysql2/driver.cjs.map +1 -1
- package/mysql2/driver.js.map +1 -1
- package/mysql2/session.cjs.map +1 -1
- package/mysql2/session.d.cts +1 -1
- package/mysql2/session.d.ts +1 -1
- package/mysql2/session.js.map +1 -1
- package/neon-http/driver.cjs.map +1 -1
- package/neon-http/driver.js.map +1 -1
- package/neon-http/session.cjs.map +1 -1
- package/neon-http/session.d.cts +1 -1
- package/neon-http/session.d.ts +1 -1
- package/neon-http/session.js.map +1 -1
- package/neon-serverless/driver.cjs +0 -8
- package/neon-serverless/driver.cjs.map +1 -1
- package/neon-serverless/driver.d.cts +0 -1
- package/neon-serverless/driver.d.ts +0 -1
- package/neon-serverless/driver.js +0 -8
- package/neon-serverless/driver.js.map +1 -1
- package/neon-serverless/session.cjs +38 -2
- package/neon-serverless/session.cjs.map +1 -1
- package/neon-serverless/session.d.cts +1 -1
- package/neon-serverless/session.d.ts +1 -1
- package/neon-serverless/session.js +40 -3
- package/neon-serverless/session.js.map +1 -1
- package/node-postgres/driver.cjs +0 -19
- package/node-postgres/driver.cjs.map +1 -1
- package/node-postgres/driver.d.cts +0 -1
- package/node-postgres/driver.d.ts +0 -1
- package/node-postgres/driver.js +0 -9
- package/node-postgres/driver.js.map +1 -1
- package/node-postgres/session.cjs +39 -3
- package/node-postgres/session.cjs.map +1 -1
- package/node-postgres/session.d.cts +1 -1
- package/node-postgres/session.d.ts +1 -1
- package/node-postgres/session.js +39 -3
- package/node-postgres/session.js.map +1 -1
- package/op-sqlite/driver.cjs.map +1 -1
- package/op-sqlite/driver.js.map +1 -1
- package/op-sqlite/session.cjs.map +1 -1
- package/op-sqlite/session.js.map +1 -1
- package/package.json +2 -2
- package/pg-core/columns/bigint.cjs.map +1 -1
- package/pg-core/columns/bigint.js.map +1 -1
- package/pg-core/columns/bigserial.cjs.map +1 -1
- package/pg-core/columns/bigserial.js.map +1 -1
- package/pg-core/columns/boolean.cjs.map +1 -1
- package/pg-core/columns/boolean.js.map +1 -1
- package/pg-core/columns/char.cjs.map +1 -1
- package/pg-core/columns/char.js.map +1 -1
- package/pg-core/columns/cidr.cjs.map +1 -1
- package/pg-core/columns/cidr.js.map +1 -1
- package/pg-core/columns/common.cjs.map +1 -1
- package/pg-core/columns/common.js.map +1 -1
- package/pg-core/columns/custom.cjs.map +1 -1
- package/pg-core/columns/custom.js.map +1 -1
- package/pg-core/columns/date.cjs.map +1 -1
- package/pg-core/columns/date.common.cjs.map +1 -1
- package/pg-core/columns/date.common.js.map +1 -1
- package/pg-core/columns/date.js.map +1 -1
- package/pg-core/columns/double-precision.cjs.map +1 -1
- package/pg-core/columns/double-precision.js.map +1 -1
- package/pg-core/columns/enum.cjs.map +1 -1
- package/pg-core/columns/enum.js.map +1 -1
- package/pg-core/columns/inet.cjs.map +1 -1
- package/pg-core/columns/inet.js.map +1 -1
- package/pg-core/columns/int.common.cjs.map +1 -1
- package/pg-core/columns/int.common.js.map +1 -1
- package/pg-core/columns/integer.cjs.map +1 -1
- package/pg-core/columns/integer.js.map +1 -1
- package/pg-core/columns/interval.cjs.map +1 -1
- package/pg-core/columns/interval.js.map +1 -1
- package/pg-core/columns/json.cjs.map +1 -1
- package/pg-core/columns/json.js.map +1 -1
- package/pg-core/columns/jsonb.cjs.map +1 -1
- package/pg-core/columns/jsonb.js.map +1 -1
- package/pg-core/columns/line.cjs.map +1 -1
- package/pg-core/columns/line.js.map +1 -1
- package/pg-core/columns/macaddr.cjs.map +1 -1
- package/pg-core/columns/macaddr.js.map +1 -1
- package/pg-core/columns/macaddr8.cjs.map +1 -1
- package/pg-core/columns/macaddr8.js.map +1 -1
- package/pg-core/columns/numeric.cjs.map +1 -1
- package/pg-core/columns/numeric.js.map +1 -1
- package/pg-core/columns/point.cjs.map +1 -1
- package/pg-core/columns/point.js.map +1 -1
- package/pg-core/columns/postgis_extension/geometry.cjs.map +1 -1
- package/pg-core/columns/postgis_extension/geometry.js.map +1 -1
- package/pg-core/columns/real.cjs.map +1 -1
- package/pg-core/columns/real.js.map +1 -1
- package/pg-core/columns/serial.cjs.map +1 -1
- package/pg-core/columns/serial.js.map +1 -1
- package/pg-core/columns/smallint.cjs.map +1 -1
- package/pg-core/columns/smallint.js.map +1 -1
- package/pg-core/columns/smallserial.cjs.map +1 -1
- package/pg-core/columns/smallserial.js.map +1 -1
- package/pg-core/columns/text.cjs.map +1 -1
- package/pg-core/columns/text.js.map +1 -1
- package/pg-core/columns/time.cjs.map +1 -1
- package/pg-core/columns/time.js.map +1 -1
- package/pg-core/columns/timestamp.cjs.map +1 -1
- package/pg-core/columns/timestamp.js.map +1 -1
- package/pg-core/columns/uuid.cjs.map +1 -1
- package/pg-core/columns/uuid.js.map +1 -1
- package/pg-core/columns/varchar.cjs.map +1 -1
- package/pg-core/columns/varchar.js.map +1 -1
- package/pg-core/columns/vector_extension/bit.cjs.map +1 -1
- package/pg-core/columns/vector_extension/bit.js.map +1 -1
- package/pg-core/columns/vector_extension/halfvec.cjs.map +1 -1
- package/pg-core/columns/vector_extension/halfvec.js.map +1 -1
- package/pg-core/columns/vector_extension/sparsevec.cjs.map +1 -1
- package/pg-core/columns/vector_extension/sparsevec.js.map +1 -1
- package/pg-core/columns/vector_extension/vector.cjs.map +1 -1
- package/pg-core/columns/vector_extension/vector.js.map +1 -1
- package/pg-core/db.d.cts +5 -5
- package/pg-core/db.d.ts +5 -5
- package/pg-core/query-builders/count.cjs.map +1 -1
- package/pg-core/query-builders/count.js.map +1 -1
- package/pg-core/query-builders/delete.cjs.map +1 -1
- package/pg-core/query-builders/delete.js.map +1 -1
- package/pg-core/query-builders/insert.cjs.map +1 -1
- package/pg-core/query-builders/insert.d.cts +1 -1
- package/pg-core/query-builders/insert.d.ts +1 -1
- package/pg-core/query-builders/insert.js.map +1 -1
- package/pg-core/query-builders/query-builder.d.cts +6 -6
- package/pg-core/query-builders/query-builder.d.ts +6 -6
- package/pg-core/query-builders/query.cjs.map +1 -1
- package/pg-core/query-builders/query.js.map +1 -1
- package/pg-core/query-builders/raw.cjs.map +1 -1
- package/pg-core/query-builders/raw.js.map +1 -1
- package/pg-core/query-builders/refresh-materialized-view.cjs.map +1 -1
- package/pg-core/query-builders/refresh-materialized-view.js.map +1 -1
- package/pg-core/query-builders/select.cjs.map +1 -1
- package/pg-core/query-builders/select.js.map +1 -1
- package/pg-core/query-builders/update.cjs.map +1 -1
- package/pg-core/query-builders/update.d.cts +1 -1
- package/pg-core/query-builders/update.d.ts +1 -1
- package/pg-core/query-builders/update.js.map +1 -1
- package/pg-core/session.cjs.map +1 -1
- package/pg-core/session.js.map +1 -1
- package/pg-core/table.cjs.map +1 -1
- package/pg-core/table.js.map +1 -1
- package/pg-core/utils.d.cts +8 -8
- package/pg-core/utils.d.ts +8 -8
- package/pg-core/view-base.cjs.map +1 -1
- package/pg-core/view-base.js.map +1 -1
- package/pg-core/view.cjs.map +1 -1
- package/pg-core/view.js.map +1 -1
- package/pg-proxy/driver.cjs.map +1 -1
- package/pg-proxy/driver.js.map +1 -1
- package/pg-proxy/session.cjs.map +1 -1
- package/pg-proxy/session.d.cts +1 -1
- package/pg-proxy/session.d.ts +1 -1
- package/pg-proxy/session.js.map +1 -1
- package/pglite/driver.cjs.map +1 -1
- package/pglite/driver.js.map +1 -1
- package/pglite/session.cjs.map +1 -1
- package/pglite/session.d.cts +1 -1
- package/pglite/session.d.ts +1 -1
- package/pglite/session.js.map +1 -1
- package/planetscale-serverless/driver.cjs.map +1 -1
- package/planetscale-serverless/driver.js.map +1 -1
- package/planetscale-serverless/session.cjs.map +1 -1
- package/planetscale-serverless/session.d.cts +1 -1
- package/planetscale-serverless/session.d.ts +1 -1
- package/planetscale-serverless/session.js.map +1 -1
- package/postgres-js/driver.cjs.map +1 -1
- package/postgres-js/driver.js.map +1 -1
- package/postgres-js/session.cjs.map +1 -1
- package/postgres-js/session.d.cts +1 -1
- package/postgres-js/session.d.ts +1 -1
- package/postgres-js/session.js.map +1 -1
- package/prisma/mysql/driver.cjs.map +1 -1
- package/prisma/mysql/driver.js.map +1 -1
- package/prisma/mysql/session.cjs.map +1 -1
- package/prisma/mysql/session.js.map +1 -1
- package/prisma/pg/driver.cjs.map +1 -1
- package/prisma/pg/driver.js.map +1 -1
- package/prisma/pg/session.cjs.map +1 -1
- package/prisma/pg/session.js.map +1 -1
- package/prisma/sqlite/session.cjs.map +1 -1
- package/prisma/sqlite/session.js.map +1 -1
- package/relations.cjs.map +1 -1
- package/relations.d.cts +13 -13
- package/relations.d.ts +13 -13
- package/relations.js.map +1 -1
- package/sql-js/session.cjs.map +1 -1
- package/sql-js/session.js.map +1 -1
- package/sqlite-core/columns/blob.cjs.map +1 -1
- package/sqlite-core/columns/blob.d.cts +0 -2
- package/sqlite-core/columns/blob.d.ts +0 -2
- package/sqlite-core/columns/blob.js.map +1 -1
- package/sqlite-core/columns/common.cjs.map +1 -1
- package/sqlite-core/columns/common.js.map +1 -1
- package/sqlite-core/columns/custom.cjs.map +1 -1
- package/sqlite-core/columns/custom.js.map +1 -1
- package/sqlite-core/columns/integer.cjs.map +1 -1
- package/sqlite-core/columns/integer.js.map +1 -1
- package/sqlite-core/columns/numeric.cjs.map +1 -1
- package/sqlite-core/columns/numeric.js.map +1 -1
- package/sqlite-core/columns/real.cjs.map +1 -1
- package/sqlite-core/columns/real.js.map +1 -1
- package/sqlite-core/columns/text.cjs.map +1 -1
- package/sqlite-core/columns/text.js.map +1 -1
- package/sqlite-core/db.d.cts +4 -4
- package/sqlite-core/db.d.ts +4 -4
- package/sqlite-core/dialect.cjs.map +1 -1
- package/sqlite-core/dialect.js.map +1 -1
- package/sqlite-core/query-builders/count.cjs.map +1 -1
- package/sqlite-core/query-builders/count.js.map +1 -1
- package/sqlite-core/query-builders/delete.cjs.map +1 -1
- package/sqlite-core/query-builders/delete.js.map +1 -1
- package/sqlite-core/query-builders/insert.cjs.map +1 -1
- package/sqlite-core/query-builders/insert.d.cts +1 -1
- package/sqlite-core/query-builders/insert.d.ts +1 -1
- package/sqlite-core/query-builders/insert.js.map +1 -1
- package/sqlite-core/query-builders/query-builder.d.cts +4 -4
- package/sqlite-core/query-builders/query-builder.d.ts +4 -4
- package/sqlite-core/query-builders/query.cjs.map +1 -1
- package/sqlite-core/query-builders/query.js.map +1 -1
- package/sqlite-core/query-builders/raw.cjs.map +1 -1
- package/sqlite-core/query-builders/raw.d.cts +1 -1
- package/sqlite-core/query-builders/raw.d.ts +1 -1
- package/sqlite-core/query-builders/raw.js.map +1 -1
- package/sqlite-core/query-builders/select.cjs.map +1 -1
- package/sqlite-core/query-builders/select.js.map +1 -1
- package/sqlite-core/query-builders/update.cjs.map +1 -1
- package/sqlite-core/query-builders/update.d.cts +1 -1
- package/sqlite-core/query-builders/update.d.ts +1 -1
- package/sqlite-core/query-builders/update.js.map +1 -1
- package/sqlite-core/session.cjs.map +1 -1
- package/sqlite-core/session.js.map +1 -1
- package/sqlite-core/table.cjs.map +1 -1
- package/sqlite-core/table.js.map +1 -1
- package/sqlite-core/utils.d.cts +5 -5
- package/sqlite-core/utils.d.ts +5 -5
- package/sqlite-core/view-base.cjs.map +1 -1
- package/sqlite-core/view-base.js.map +1 -1
- package/sqlite-core/view.cjs.map +1 -1
- package/sqlite-core/view.js.map +1 -1
- package/sqlite-proxy/driver.cjs.map +1 -1
- package/sqlite-proxy/driver.js.map +1 -1
- package/sqlite-proxy/session.cjs.map +1 -1
- package/sqlite-proxy/session.js.map +1 -1
- package/subquery.cjs.map +1 -1
- package/subquery.js.map +1 -1
- package/tidb-serverless/driver.cjs.map +1 -1
- package/tidb-serverless/driver.js.map +1 -1
- package/tidb-serverless/session.cjs.map +1 -1
- package/tidb-serverless/session.d.cts +1 -1
- package/tidb-serverless/session.d.ts +1 -1
- package/tidb-serverless/session.js.map +1 -1
- package/vercel-postgres/driver.cjs +0 -8
- package/vercel-postgres/driver.cjs.map +1 -1
- package/vercel-postgres/driver.d.cts +0 -1
- package/vercel-postgres/driver.d.ts +0 -1
- package/vercel-postgres/driver.js +0 -8
- package/vercel-postgres/driver.js.map +1 -1
- package/vercel-postgres/session.cjs +38 -2
- package/vercel-postgres/session.cjs.map +1 -1
- package/vercel-postgres/session.d.cts +1 -1
- package/vercel-postgres/session.d.ts +1 -1
- package/vercel-postgres/session.js +39 -2
- 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.map +1 -1
- package/xata-http/driver.js.map +1 -1
- package/xata-http/session.cjs.map +1 -1
- package/xata-http/session.d.cts +1 -1
- package/xata-http/session.d.ts +1 -1
- package/xata-http/session.js.map +1 -1
package/d1/driver.d.ts
CHANGED
package/d1/driver.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/d1/driver.ts"],"sourcesContent":["/// <reference types=\"@cloudflare/workers-types\" />\nimport type { D1Database as MiniflareD1Database } from '@miniflare/d1';\nimport type { BatchItem, BatchResponse } from '~/batch.ts';\nimport { entityKind } from '~/entity.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport {\n\tcreateTableRelationsHelpers,\n\textractTablesRelationalConfig,\n\ttype ExtractTablesWithRelations,\n\ttype RelationalSchemaConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport { BaseSQLiteDatabase } from '~/sqlite-core/db.ts';\nimport { SQLiteAsyncDialect } from '~/sqlite-core/dialect.ts';\nimport type { DrizzleConfig, IfNotImported } from '~/utils.ts';\nimport { SQLiteD1Session } from './session.ts';\n\nexport type AnyD1Database = IfNotImported<\n\tD1Database,\n\tMiniflareD1Database,\n\tD1Database | IfNotImported<MiniflareD1Database, never, MiniflareD1Database>\n>;\n\nexport class DrizzleD1Database<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> extends BaseSQLiteDatabase<'async', D1Result, TSchema> {\n\tstatic readonly [entityKind]: string = 'D1Database';\n\n\t/** @internal */\n\tdeclare readonly session: SQLiteD1Session<TSchema, ExtractTablesWithRelations<TSchema>>;\n\n\tasync batch<U extends BatchItem<'sqlite'>, 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\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends AnyD1Database = AnyD1Database,\n>(\n\tclient: TClient,\n\tconfig: DrizzleConfig<TSchema> = {},\n): DrizzleD1Database<TSchema> & {\n\t$client: TClient;\n} {\n\tconst dialect = new SQLiteAsyncDialect({ 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 session = new SQLiteD1Session(client as D1Database, dialect, schema, { logger });\n\tconst db = new DrizzleD1Database('async', dialect, session, schema) as DrizzleD1Database<TSchema>;\n\t(<any> db).$client = client;\n\n\treturn db as any;\n}\n"],"mappings":"AAGA,SAAS,kBAAkB;AAC3B,SAAS,qBAAqB;AAC9B;AAAA,EACC;AAAA,EACA;AAAA,OAIM;AACP,SAAS,0BAA0B;AACnC,SAAS,0BAA0B;AAEnC,SAAS,uBAAuB;AAQzB,MAAM,0BAEH,mBAA+C;AAAA,EACxD,
|
|
1
|
+
{"version":3,"sources":["../../src/d1/driver.ts"],"sourcesContent":["/// <reference types=\"@cloudflare/workers-types\" />\nimport type { D1Database as MiniflareD1Database } from '@miniflare/d1';\nimport type { BatchItem, BatchResponse } from '~/batch.ts';\nimport { entityKind } from '~/entity.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport {\n\tcreateTableRelationsHelpers,\n\textractTablesRelationalConfig,\n\ttype ExtractTablesWithRelations,\n\ttype RelationalSchemaConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport { BaseSQLiteDatabase } from '~/sqlite-core/db.ts';\nimport { SQLiteAsyncDialect } from '~/sqlite-core/dialect.ts';\nimport type { DrizzleConfig, IfNotImported } from '~/utils.ts';\nimport { SQLiteD1Session } from './session.ts';\n\nexport type AnyD1Database = IfNotImported<\n\tD1Database,\n\tMiniflareD1Database,\n\tD1Database | IfNotImported<MiniflareD1Database, never, MiniflareD1Database>\n>;\n\nexport class DrizzleD1Database<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> extends BaseSQLiteDatabase<'async', D1Result, TSchema> {\n\tstatic override readonly [entityKind]: string = 'D1Database';\n\n\t/** @internal */\n\tdeclare readonly session: SQLiteD1Session<TSchema, ExtractTablesWithRelations<TSchema>>;\n\n\tasync batch<U extends BatchItem<'sqlite'>, 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\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends AnyD1Database = AnyD1Database,\n>(\n\tclient: TClient,\n\tconfig: DrizzleConfig<TSchema> = {},\n): DrizzleD1Database<TSchema> & {\n\t$client: TClient;\n} {\n\tconst dialect = new SQLiteAsyncDialect({ 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 session = new SQLiteD1Session(client as D1Database, dialect, schema, { logger });\n\tconst db = new DrizzleD1Database('async', dialect, session, schema) as DrizzleD1Database<TSchema>;\n\t(<any> db).$client = client;\n\n\treturn db as any;\n}\n"],"mappings":"AAGA,SAAS,kBAAkB;AAC3B,SAAS,qBAAqB;AAC9B;AAAA,EACC;AAAA,EACA;AAAA,OAIM;AACP,SAAS,0BAA0B;AACnC,SAAS,0BAA0B;AAEnC,SAAS,uBAAuB;AAQzB,MAAM,0BAEH,mBAA+C;AAAA,EACxD,QAA0B,UAAU,IAAY;AAAA,EAKhD,MAAM,MACL,OAC4B;AAC5B,WAAO,KAAK,QAAQ,MAAM,KAAK;AAAA,EAChC;AACD;AAEO,SAAS,QAIf,QACA,SAAiC,CAAC,GAGjC;AACD,QAAM,UAAU,IAAI,mBAAmB,EAAE,QAAQ,OAAO,OAAO,CAAC;AAChE,MAAI;AACJ,MAAI,OAAO,WAAW,MAAM;AAC3B,aAAS,IAAI,cAAc;AAAA,EAC5B,WAAW,OAAO,WAAW,OAAO;AACnC,aAAS,OAAO;AAAA,EACjB;AAEA,MAAI;AACJ,MAAI,OAAO,QAAQ;AAClB,UAAM,eAAe;AAAA,MACpB,OAAO;AAAA,MACP;AAAA,IACD;AACA,aAAS;AAAA,MACR,YAAY,OAAO;AAAA,MACnB,QAAQ,aAAa;AAAA,MACrB,eAAe,aAAa;AAAA,IAC7B;AAAA,EACD;AAEA,QAAM,UAAU,IAAI,gBAAgB,QAAsB,SAAS,QAAQ,EAAE,OAAO,CAAC;AACrF,QAAM,KAAK,IAAI,kBAAkB,SAAS,SAAS,SAAS,MAAM;AAClE,EAAO,GAAI,UAAU;AAErB,SAAO;AACR;","names":[]}
|
package/d1/session.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/d1/session.ts"],"sourcesContent":["/// <reference types=\"@cloudflare/workers-types\" />\n\nimport type { BatchItem } from '~/batch.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport type { PreparedQuery } from '~/session.ts';\nimport { fillPlaceholders, type Query, sql } from '~/sql/sql.ts';\nimport type { SQLiteAsyncDialect } from '~/sqlite-core/dialect.ts';\nimport { SQLiteTransaction } from '~/sqlite-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/sqlite-core/query-builders/select.types.ts';\nimport type {\n\tPreparedQueryConfig as PreparedQueryConfigBase,\n\tSQLiteExecuteMethod,\n\tSQLiteTransactionConfig,\n} from '~/sqlite-core/session.ts';\nimport { SQLitePreparedQuery, SQLiteSession } from '~/sqlite-core/session.ts';\nimport { mapResultRow } from '~/utils.ts';\n\nexport interface SQLiteD1SessionOptions {\n\tlogger?: Logger;\n}\n\ntype PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\n\nexport class SQLiteD1Session<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteSession<'async', D1Result, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'SQLiteD1Session';\n\n\tprivate logger: Logger;\n\n\tconstructor(\n\t\tprivate client: D1Database,\n\t\tdialect: SQLiteAsyncDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: SQLiteD1SessionOptions = {},\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t}\n\n\tprepareQuery(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => unknown,\n\t): D1PreparedQuery {\n\t\tconst stmt = this.client.prepare(query.sql);\n\t\treturn new D1PreparedQuery(\n\t\t\tstmt,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\texecuteMethod,\n\t\t\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t);\n\t}\n\n\tasync batch<T extends BatchItem<'sqlite'>[] | readonly BatchItem<'sqlite'>[]>(queries: T) {\n\t\tconst preparedQueries: PreparedQuery[] = [];\n\t\tconst builtQueries: D1PreparedStatement[] = [];\n\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\tif (builtQuery.params.length > 0) {\n\t\t\t\tbuiltQueries.push((preparedQuery as D1PreparedQuery).stmt.bind(...builtQuery.params));\n\t\t\t} else {\n\t\t\t\tconst builtQuery = preparedQuery.getQuery();\n\t\t\t\tbuiltQueries.push(\n\t\t\t\t\tthis.client.prepare(builtQuery.sql).bind(...builtQuery.params),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst batchResults = await this.client.batch<any>(builtQueries);\n\t\treturn batchResults.map((result, i) => preparedQueries[i]!.mapResult(result, true));\n\t}\n\n\toverride extractRawAllValueFromBatchResult(result: unknown): unknown {\n\t\treturn (result as D1Result).results;\n\t}\n\n\toverride extractRawGetValueFromBatchResult(result: unknown): unknown {\n\t\treturn (result as D1Result).results[0];\n\t}\n\n\toverride extractRawValuesValueFromBatchResult(result: unknown): unknown {\n\t\treturn d1ToRawMapping((result as D1Result).results);\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: D1Transaction<TFullSchema, TSchema>) => T | Promise<T>,\n\t\tconfig?: SQLiteTransactionConfig,\n\t): Promise<T> {\n\t\tconst tx = new D1Transaction('async', this.dialect, this, this.schema);\n\t\tawait this.run(sql.raw(`begin${config?.behavior ? ' ' + config.behavior : ''}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait this.run(sql`commit`);\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait this.run(sql`rollback`);\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport class D1Transaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteTransaction<'async', D1Result, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'D1Transaction';\n\n\toverride async transaction<T>(transaction: (tx: D1Transaction<TFullSchema, TSchema>) => Promise<T>): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex}`;\n\t\tconst tx = new D1Transaction('async', this.dialect, this.session, this.schema, this.nestedIndex + 1);\n\t\tawait this.session.run(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait this.session.run(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait this.session.run(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\n/**\n * This function was taken from the D1 implementation: https://github.com/cloudflare/workerd/blob/4aae9f4c7ae30a59a88ca868c4aff88bda85c956/src/cloudflare/internal/d1-api.ts#L287\n * It may cause issues with duplicated column names in join queries, which should be fixed on the D1 side.\n * @param results\n * @returns\n */\nfunction d1ToRawMapping(results: any) {\n\tconst rows: unknown[][] = [];\n\tfor (const row of results) {\n\t\tconst entry = Object.keys(row).map((k) => row[k]);\n\t\trows.push(entry);\n\t}\n\treturn rows;\n}\n\nexport class D1PreparedQuery<T extends PreparedQueryConfig = PreparedQueryConfig> extends SQLitePreparedQuery<\n\t{ type: 'async'; run: D1Response; all: T['all']; get: T['get']; values: T['values']; execute: T['execute'] }\n> {\n\tstatic readonly [entityKind]: string = 'D1PreparedQuery';\n\n\t/** @internal */\n\tcustomResultMapper?: (rows: unknown[][], mapColumnValue?: (value: unknown) => unknown) => unknown;\n\n\t/** @internal */\n\tfields?: SelectedFieldsOrdered;\n\n\t/** @internal */\n\tstmt: D1PreparedStatement;\n\n\tconstructor(\n\t\tstmt: D1PreparedStatement,\n\t\tquery: Query,\n\t\tprivate logger: Logger,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tprivate _isResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => unknown,\n\t) {\n\t\tsuper('async', executeMethod, query);\n\t\tthis.customResultMapper = customResultMapper;\n\t\tthis.fields = fields;\n\t\tthis.stmt = stmt;\n\t}\n\n\trun(placeholderValues?: Record<string, unknown>): Promise<D1Response> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\treturn this.stmt.bind(...params).run();\n\t}\n\n\tasync all(placeholderValues?: Record<string, unknown>): Promise<T['all']> {\n\t\tconst { fields, query, logger, stmt, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\treturn stmt.bind(...params).all().then(({ results }) => this.mapAllResult(results!));\n\t\t}\n\n\t\tconst rows = await this.values(placeholderValues);\n\n\t\treturn this.mapAllResult(rows);\n\t}\n\n\toverride mapAllResult(rows: unknown, isFromBatch?: boolean): unknown {\n\t\tif (isFromBatch) {\n\t\t\trows = d1ToRawMapping((rows as D1Result).results);\n\t\t}\n\n\t\tif (!this.fields && !this.customResultMapper) {\n\t\t\treturn rows;\n\t\t}\n\n\t\tif (this.customResultMapper) {\n\t\t\treturn this.customResultMapper(rows as unknown[][]);\n\t\t}\n\n\t\treturn (rows as unknown[][]).map((row) => mapResultRow(this.fields!, row, this.joinsNotNullableMap));\n\t}\n\n\tasync get(placeholderValues?: Record<string, unknown>): Promise<T['get']> {\n\t\tconst { fields, joinsNotNullableMap, query, logger, stmt, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\treturn stmt.bind(...params).all().then(({ results }) => results![0]);\n\t\t}\n\n\t\tconst rows = await this.values(placeholderValues);\n\n\t\tif (!rows[0]) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper(rows) as T['all'];\n\t\t}\n\n\t\treturn mapResultRow(fields!, rows[0], joinsNotNullableMap);\n\t}\n\n\toverride mapGetResult(result: unknown, isFromBatch?: boolean): unknown {\n\t\tif (isFromBatch) {\n\t\t\tresult = d1ToRawMapping((result as D1Result).results)[0];\n\t\t}\n\n\t\tif (!this.fields && !this.customResultMapper) {\n\t\t\treturn result;\n\t\t}\n\n\t\tif (this.customResultMapper) {\n\t\t\treturn this.customResultMapper([result as unknown[]]) as T['all'];\n\t\t}\n\n\t\treturn mapResultRow(this.fields!, result as unknown[], this.joinsNotNullableMap);\n\t}\n\n\tvalues<T extends any[] = unknown[]>(placeholderValues?: Record<string, unknown>): Promise<T[]> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\treturn this.stmt.bind(...params).raw();\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode(): boolean {\n\t\treturn this._isResponseInArrayMode;\n\t}\n}\n"],"mappings":"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","names":["builtQuery"]}
|
|
1
|
+
{"version":3,"sources":["../../src/d1/session.ts"],"sourcesContent":["/// <reference types=\"@cloudflare/workers-types\" />\n\nimport type { BatchItem } from '~/batch.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport type { PreparedQuery } from '~/session.ts';\nimport { fillPlaceholders, type Query, sql } from '~/sql/sql.ts';\nimport type { SQLiteAsyncDialect } from '~/sqlite-core/dialect.ts';\nimport { SQLiteTransaction } from '~/sqlite-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/sqlite-core/query-builders/select.types.ts';\nimport type {\n\tPreparedQueryConfig as PreparedQueryConfigBase,\n\tSQLiteExecuteMethod,\n\tSQLiteTransactionConfig,\n} from '~/sqlite-core/session.ts';\nimport { SQLitePreparedQuery, SQLiteSession } from '~/sqlite-core/session.ts';\nimport { mapResultRow } from '~/utils.ts';\n\nexport interface SQLiteD1SessionOptions {\n\tlogger?: Logger;\n}\n\ntype PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\n\nexport class SQLiteD1Session<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteSession<'async', D1Result, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'SQLiteD1Session';\n\n\tprivate logger: Logger;\n\n\tconstructor(\n\t\tprivate client: D1Database,\n\t\tdialect: SQLiteAsyncDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: SQLiteD1SessionOptions = {},\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t}\n\n\tprepareQuery(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => unknown,\n\t): D1PreparedQuery {\n\t\tconst stmt = this.client.prepare(query.sql);\n\t\treturn new D1PreparedQuery(\n\t\t\tstmt,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\texecuteMethod,\n\t\t\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t);\n\t}\n\n\tasync batch<T extends BatchItem<'sqlite'>[] | readonly BatchItem<'sqlite'>[]>(queries: T) {\n\t\tconst preparedQueries: PreparedQuery[] = [];\n\t\tconst builtQueries: D1PreparedStatement[] = [];\n\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\tif (builtQuery.params.length > 0) {\n\t\t\t\tbuiltQueries.push((preparedQuery as D1PreparedQuery).stmt.bind(...builtQuery.params));\n\t\t\t} else {\n\t\t\t\tconst builtQuery = preparedQuery.getQuery();\n\t\t\t\tbuiltQueries.push(\n\t\t\t\t\tthis.client.prepare(builtQuery.sql).bind(...builtQuery.params),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst batchResults = await this.client.batch<any>(builtQueries);\n\t\treturn batchResults.map((result, i) => preparedQueries[i]!.mapResult(result, true));\n\t}\n\n\toverride extractRawAllValueFromBatchResult(result: unknown): unknown {\n\t\treturn (result as D1Result).results;\n\t}\n\n\toverride extractRawGetValueFromBatchResult(result: unknown): unknown {\n\t\treturn (result as D1Result).results[0];\n\t}\n\n\toverride extractRawValuesValueFromBatchResult(result: unknown): unknown {\n\t\treturn d1ToRawMapping((result as D1Result).results);\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: D1Transaction<TFullSchema, TSchema>) => T | Promise<T>,\n\t\tconfig?: SQLiteTransactionConfig,\n\t): Promise<T> {\n\t\tconst tx = new D1Transaction('async', this.dialect, this, this.schema);\n\t\tawait this.run(sql.raw(`begin${config?.behavior ? ' ' + config.behavior : ''}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait this.run(sql`commit`);\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait this.run(sql`rollback`);\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport class D1Transaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteTransaction<'async', D1Result, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'D1Transaction';\n\n\toverride async transaction<T>(transaction: (tx: D1Transaction<TFullSchema, TSchema>) => Promise<T>): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex}`;\n\t\tconst tx = new D1Transaction('async', this.dialect, this.session, this.schema, this.nestedIndex + 1);\n\t\tawait this.session.run(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait this.session.run(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait this.session.run(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\n/**\n * This function was taken from the D1 implementation: https://github.com/cloudflare/workerd/blob/4aae9f4c7ae30a59a88ca868c4aff88bda85c956/src/cloudflare/internal/d1-api.ts#L287\n * It may cause issues with duplicated column names in join queries, which should be fixed on the D1 side.\n * @param results\n * @returns\n */\nfunction d1ToRawMapping(results: any) {\n\tconst rows: unknown[][] = [];\n\tfor (const row of results) {\n\t\tconst entry = Object.keys(row).map((k) => row[k]);\n\t\trows.push(entry);\n\t}\n\treturn rows;\n}\n\nexport class D1PreparedQuery<T extends PreparedQueryConfig = PreparedQueryConfig> extends SQLitePreparedQuery<\n\t{ type: 'async'; run: D1Response; all: T['all']; get: T['get']; values: T['values']; execute: T['execute'] }\n> {\n\tstatic override readonly [entityKind]: string = 'D1PreparedQuery';\n\n\t/** @internal */\n\tcustomResultMapper?: (rows: unknown[][], mapColumnValue?: (value: unknown) => unknown) => unknown;\n\n\t/** @internal */\n\tfields?: SelectedFieldsOrdered;\n\n\t/** @internal */\n\tstmt: D1PreparedStatement;\n\n\tconstructor(\n\t\tstmt: D1PreparedStatement,\n\t\tquery: Query,\n\t\tprivate logger: Logger,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tprivate _isResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => unknown,\n\t) {\n\t\tsuper('async', executeMethod, query);\n\t\tthis.customResultMapper = customResultMapper;\n\t\tthis.fields = fields;\n\t\tthis.stmt = stmt;\n\t}\n\n\trun(placeholderValues?: Record<string, unknown>): Promise<D1Response> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\treturn this.stmt.bind(...params).run();\n\t}\n\n\tasync all(placeholderValues?: Record<string, unknown>): Promise<T['all']> {\n\t\tconst { fields, query, logger, stmt, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\treturn stmt.bind(...params).all().then(({ results }) => this.mapAllResult(results!));\n\t\t}\n\n\t\tconst rows = await this.values(placeholderValues);\n\n\t\treturn this.mapAllResult(rows);\n\t}\n\n\toverride mapAllResult(rows: unknown, isFromBatch?: boolean): unknown {\n\t\tif (isFromBatch) {\n\t\t\trows = d1ToRawMapping((rows as D1Result).results);\n\t\t}\n\n\t\tif (!this.fields && !this.customResultMapper) {\n\t\t\treturn rows;\n\t\t}\n\n\t\tif (this.customResultMapper) {\n\t\t\treturn this.customResultMapper(rows as unknown[][]);\n\t\t}\n\n\t\treturn (rows as unknown[][]).map((row) => mapResultRow(this.fields!, row, this.joinsNotNullableMap));\n\t}\n\n\tasync get(placeholderValues?: Record<string, unknown>): Promise<T['get']> {\n\t\tconst { fields, joinsNotNullableMap, query, logger, stmt, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\treturn stmt.bind(...params).all().then(({ results }) => results![0]);\n\t\t}\n\n\t\tconst rows = await this.values(placeholderValues);\n\n\t\tif (!rows[0]) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper(rows) as T['all'];\n\t\t}\n\n\t\treturn mapResultRow(fields!, rows[0], joinsNotNullableMap);\n\t}\n\n\toverride mapGetResult(result: unknown, isFromBatch?: boolean): unknown {\n\t\tif (isFromBatch) {\n\t\t\tresult = d1ToRawMapping((result as D1Result).results)[0];\n\t\t}\n\n\t\tif (!this.fields && !this.customResultMapper) {\n\t\t\treturn result;\n\t\t}\n\n\t\tif (this.customResultMapper) {\n\t\t\treturn this.customResultMapper([result as unknown[]]) as T['all'];\n\t\t}\n\n\t\treturn mapResultRow(this.fields!, result as unknown[], this.joinsNotNullableMap);\n\t}\n\n\tvalues<T extends any[] = unknown[]>(placeholderValues?: Record<string, unknown>): Promise<T[]> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\treturn this.stmt.bind(...params).raw();\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode(): boolean {\n\t\treturn this._isResponseInArrayMode;\n\t}\n}\n"],"mappings":"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","names":["builtQuery"]}
|
package/d1/session.d.cts
CHANGED
package/d1/session.d.ts
CHANGED
package/d1/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/d1/session.ts"],"sourcesContent":["/// <reference types=\"@cloudflare/workers-types\" />\n\nimport type { BatchItem } from '~/batch.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport type { PreparedQuery } from '~/session.ts';\nimport { fillPlaceholders, type Query, sql } from '~/sql/sql.ts';\nimport type { SQLiteAsyncDialect } from '~/sqlite-core/dialect.ts';\nimport { SQLiteTransaction } from '~/sqlite-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/sqlite-core/query-builders/select.types.ts';\nimport type {\n\tPreparedQueryConfig as PreparedQueryConfigBase,\n\tSQLiteExecuteMethod,\n\tSQLiteTransactionConfig,\n} from '~/sqlite-core/session.ts';\nimport { SQLitePreparedQuery, SQLiteSession } from '~/sqlite-core/session.ts';\nimport { mapResultRow } from '~/utils.ts';\n\nexport interface SQLiteD1SessionOptions {\n\tlogger?: Logger;\n}\n\ntype PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\n\nexport class SQLiteD1Session<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteSession<'async', D1Result, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'SQLiteD1Session';\n\n\tprivate logger: Logger;\n\n\tconstructor(\n\t\tprivate client: D1Database,\n\t\tdialect: SQLiteAsyncDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: SQLiteD1SessionOptions = {},\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t}\n\n\tprepareQuery(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => unknown,\n\t): D1PreparedQuery {\n\t\tconst stmt = this.client.prepare(query.sql);\n\t\treturn new D1PreparedQuery(\n\t\t\tstmt,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\texecuteMethod,\n\t\t\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t);\n\t}\n\n\tasync batch<T extends BatchItem<'sqlite'>[] | readonly BatchItem<'sqlite'>[]>(queries: T) {\n\t\tconst preparedQueries: PreparedQuery[] = [];\n\t\tconst builtQueries: D1PreparedStatement[] = [];\n\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\tif (builtQuery.params.length > 0) {\n\t\t\t\tbuiltQueries.push((preparedQuery as D1PreparedQuery).stmt.bind(...builtQuery.params));\n\t\t\t} else {\n\t\t\t\tconst builtQuery = preparedQuery.getQuery();\n\t\t\t\tbuiltQueries.push(\n\t\t\t\t\tthis.client.prepare(builtQuery.sql).bind(...builtQuery.params),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst batchResults = await this.client.batch<any>(builtQueries);\n\t\treturn batchResults.map((result, i) => preparedQueries[i]!.mapResult(result, true));\n\t}\n\n\toverride extractRawAllValueFromBatchResult(result: unknown): unknown {\n\t\treturn (result as D1Result).results;\n\t}\n\n\toverride extractRawGetValueFromBatchResult(result: unknown): unknown {\n\t\treturn (result as D1Result).results[0];\n\t}\n\n\toverride extractRawValuesValueFromBatchResult(result: unknown): unknown {\n\t\treturn d1ToRawMapping((result as D1Result).results);\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: D1Transaction<TFullSchema, TSchema>) => T | Promise<T>,\n\t\tconfig?: SQLiteTransactionConfig,\n\t): Promise<T> {\n\t\tconst tx = new D1Transaction('async', this.dialect, this, this.schema);\n\t\tawait this.run(sql.raw(`begin${config?.behavior ? ' ' + config.behavior : ''}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait this.run(sql`commit`);\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait this.run(sql`rollback`);\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport class D1Transaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteTransaction<'async', D1Result, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'D1Transaction';\n\n\toverride async transaction<T>(transaction: (tx: D1Transaction<TFullSchema, TSchema>) => Promise<T>): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex}`;\n\t\tconst tx = new D1Transaction('async', this.dialect, this.session, this.schema, this.nestedIndex + 1);\n\t\tawait this.session.run(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait this.session.run(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait this.session.run(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\n/**\n * This function was taken from the D1 implementation: https://github.com/cloudflare/workerd/blob/4aae9f4c7ae30a59a88ca868c4aff88bda85c956/src/cloudflare/internal/d1-api.ts#L287\n * It may cause issues with duplicated column names in join queries, which should be fixed on the D1 side.\n * @param results\n * @returns\n */\nfunction d1ToRawMapping(results: any) {\n\tconst rows: unknown[][] = [];\n\tfor (const row of results) {\n\t\tconst entry = Object.keys(row).map((k) => row[k]);\n\t\trows.push(entry);\n\t}\n\treturn rows;\n}\n\nexport class D1PreparedQuery<T extends PreparedQueryConfig = PreparedQueryConfig> extends SQLitePreparedQuery<\n\t{ type: 'async'; run: D1Response; all: T['all']; get: T['get']; values: T['values']; execute: T['execute'] }\n> {\n\tstatic readonly [entityKind]: string = 'D1PreparedQuery';\n\n\t/** @internal */\n\tcustomResultMapper?: (rows: unknown[][], mapColumnValue?: (value: unknown) => unknown) => unknown;\n\n\t/** @internal */\n\tfields?: SelectedFieldsOrdered;\n\n\t/** @internal */\n\tstmt: D1PreparedStatement;\n\n\tconstructor(\n\t\tstmt: D1PreparedStatement,\n\t\tquery: Query,\n\t\tprivate logger: Logger,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tprivate _isResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => unknown,\n\t) {\n\t\tsuper('async', executeMethod, query);\n\t\tthis.customResultMapper = customResultMapper;\n\t\tthis.fields = fields;\n\t\tthis.stmt = stmt;\n\t}\n\n\trun(placeholderValues?: Record<string, unknown>): Promise<D1Response> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\treturn this.stmt.bind(...params).run();\n\t}\n\n\tasync all(placeholderValues?: Record<string, unknown>): Promise<T['all']> {\n\t\tconst { fields, query, logger, stmt, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\treturn stmt.bind(...params).all().then(({ results }) => this.mapAllResult(results!));\n\t\t}\n\n\t\tconst rows = await this.values(placeholderValues);\n\n\t\treturn this.mapAllResult(rows);\n\t}\n\n\toverride mapAllResult(rows: unknown, isFromBatch?: boolean): unknown {\n\t\tif (isFromBatch) {\n\t\t\trows = d1ToRawMapping((rows as D1Result).results);\n\t\t}\n\n\t\tif (!this.fields && !this.customResultMapper) {\n\t\t\treturn rows;\n\t\t}\n\n\t\tif (this.customResultMapper) {\n\t\t\treturn this.customResultMapper(rows as unknown[][]);\n\t\t}\n\n\t\treturn (rows as unknown[][]).map((row) => mapResultRow(this.fields!, row, this.joinsNotNullableMap));\n\t}\n\n\tasync get(placeholderValues?: Record<string, unknown>): Promise<T['get']> {\n\t\tconst { fields, joinsNotNullableMap, query, logger, stmt, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\treturn stmt.bind(...params).all().then(({ results }) => results![0]);\n\t\t}\n\n\t\tconst rows = await this.values(placeholderValues);\n\n\t\tif (!rows[0]) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper(rows) as T['all'];\n\t\t}\n\n\t\treturn mapResultRow(fields!, rows[0], joinsNotNullableMap);\n\t}\n\n\toverride mapGetResult(result: unknown, isFromBatch?: boolean): unknown {\n\t\tif (isFromBatch) {\n\t\t\tresult = d1ToRawMapping((result as D1Result).results)[0];\n\t\t}\n\n\t\tif (!this.fields && !this.customResultMapper) {\n\t\t\treturn result;\n\t\t}\n\n\t\tif (this.customResultMapper) {\n\t\t\treturn this.customResultMapper([result as unknown[]]) as T['all'];\n\t\t}\n\n\t\treturn mapResultRow(this.fields!, result as unknown[], this.joinsNotNullableMap);\n\t}\n\n\tvalues<T extends any[] = unknown[]>(placeholderValues?: Record<string, unknown>): Promise<T[]> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\treturn this.stmt.bind(...params).raw();\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode(): boolean {\n\t\treturn this._isResponseInArrayMode;\n\t}\n}\n"],"mappings":"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","names":["builtQuery"]}
|
|
1
|
+
{"version":3,"sources":["../../src/d1/session.ts"],"sourcesContent":["/// <reference types=\"@cloudflare/workers-types\" />\n\nimport type { BatchItem } from '~/batch.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport type { PreparedQuery } from '~/session.ts';\nimport { fillPlaceholders, type Query, sql } from '~/sql/sql.ts';\nimport type { SQLiteAsyncDialect } from '~/sqlite-core/dialect.ts';\nimport { SQLiteTransaction } from '~/sqlite-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/sqlite-core/query-builders/select.types.ts';\nimport type {\n\tPreparedQueryConfig as PreparedQueryConfigBase,\n\tSQLiteExecuteMethod,\n\tSQLiteTransactionConfig,\n} from '~/sqlite-core/session.ts';\nimport { SQLitePreparedQuery, SQLiteSession } from '~/sqlite-core/session.ts';\nimport { mapResultRow } from '~/utils.ts';\n\nexport interface SQLiteD1SessionOptions {\n\tlogger?: Logger;\n}\n\ntype PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\n\nexport class SQLiteD1Session<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteSession<'async', D1Result, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'SQLiteD1Session';\n\n\tprivate logger: Logger;\n\n\tconstructor(\n\t\tprivate client: D1Database,\n\t\tdialect: SQLiteAsyncDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: SQLiteD1SessionOptions = {},\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t}\n\n\tprepareQuery(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => unknown,\n\t): D1PreparedQuery {\n\t\tconst stmt = this.client.prepare(query.sql);\n\t\treturn new D1PreparedQuery(\n\t\t\tstmt,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\texecuteMethod,\n\t\t\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t);\n\t}\n\n\tasync batch<T extends BatchItem<'sqlite'>[] | readonly BatchItem<'sqlite'>[]>(queries: T) {\n\t\tconst preparedQueries: PreparedQuery[] = [];\n\t\tconst builtQueries: D1PreparedStatement[] = [];\n\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\tif (builtQuery.params.length > 0) {\n\t\t\t\tbuiltQueries.push((preparedQuery as D1PreparedQuery).stmt.bind(...builtQuery.params));\n\t\t\t} else {\n\t\t\t\tconst builtQuery = preparedQuery.getQuery();\n\t\t\t\tbuiltQueries.push(\n\t\t\t\t\tthis.client.prepare(builtQuery.sql).bind(...builtQuery.params),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst batchResults = await this.client.batch<any>(builtQueries);\n\t\treturn batchResults.map((result, i) => preparedQueries[i]!.mapResult(result, true));\n\t}\n\n\toverride extractRawAllValueFromBatchResult(result: unknown): unknown {\n\t\treturn (result as D1Result).results;\n\t}\n\n\toverride extractRawGetValueFromBatchResult(result: unknown): unknown {\n\t\treturn (result as D1Result).results[0];\n\t}\n\n\toverride extractRawValuesValueFromBatchResult(result: unknown): unknown {\n\t\treturn d1ToRawMapping((result as D1Result).results);\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: D1Transaction<TFullSchema, TSchema>) => T | Promise<T>,\n\t\tconfig?: SQLiteTransactionConfig,\n\t): Promise<T> {\n\t\tconst tx = new D1Transaction('async', this.dialect, this, this.schema);\n\t\tawait this.run(sql.raw(`begin${config?.behavior ? ' ' + config.behavior : ''}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait this.run(sql`commit`);\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait this.run(sql`rollback`);\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport class D1Transaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteTransaction<'async', D1Result, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'D1Transaction';\n\n\toverride async transaction<T>(transaction: (tx: D1Transaction<TFullSchema, TSchema>) => Promise<T>): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex}`;\n\t\tconst tx = new D1Transaction('async', this.dialect, this.session, this.schema, this.nestedIndex + 1);\n\t\tawait this.session.run(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait this.session.run(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait this.session.run(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\n/**\n * This function was taken from the D1 implementation: https://github.com/cloudflare/workerd/blob/4aae9f4c7ae30a59a88ca868c4aff88bda85c956/src/cloudflare/internal/d1-api.ts#L287\n * It may cause issues with duplicated column names in join queries, which should be fixed on the D1 side.\n * @param results\n * @returns\n */\nfunction d1ToRawMapping(results: any) {\n\tconst rows: unknown[][] = [];\n\tfor (const row of results) {\n\t\tconst entry = Object.keys(row).map((k) => row[k]);\n\t\trows.push(entry);\n\t}\n\treturn rows;\n}\n\nexport class D1PreparedQuery<T extends PreparedQueryConfig = PreparedQueryConfig> extends SQLitePreparedQuery<\n\t{ type: 'async'; run: D1Response; all: T['all']; get: T['get']; values: T['values']; execute: T['execute'] }\n> {\n\tstatic override readonly [entityKind]: string = 'D1PreparedQuery';\n\n\t/** @internal */\n\tcustomResultMapper?: (rows: unknown[][], mapColumnValue?: (value: unknown) => unknown) => unknown;\n\n\t/** @internal */\n\tfields?: SelectedFieldsOrdered;\n\n\t/** @internal */\n\tstmt: D1PreparedStatement;\n\n\tconstructor(\n\t\tstmt: D1PreparedStatement,\n\t\tquery: Query,\n\t\tprivate logger: Logger,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tprivate _isResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => unknown,\n\t) {\n\t\tsuper('async', executeMethod, query);\n\t\tthis.customResultMapper = customResultMapper;\n\t\tthis.fields = fields;\n\t\tthis.stmt = stmt;\n\t}\n\n\trun(placeholderValues?: Record<string, unknown>): Promise<D1Response> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\treturn this.stmt.bind(...params).run();\n\t}\n\n\tasync all(placeholderValues?: Record<string, unknown>): Promise<T['all']> {\n\t\tconst { fields, query, logger, stmt, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\treturn stmt.bind(...params).all().then(({ results }) => this.mapAllResult(results!));\n\t\t}\n\n\t\tconst rows = await this.values(placeholderValues);\n\n\t\treturn this.mapAllResult(rows);\n\t}\n\n\toverride mapAllResult(rows: unknown, isFromBatch?: boolean): unknown {\n\t\tif (isFromBatch) {\n\t\t\trows = d1ToRawMapping((rows as D1Result).results);\n\t\t}\n\n\t\tif (!this.fields && !this.customResultMapper) {\n\t\t\treturn rows;\n\t\t}\n\n\t\tif (this.customResultMapper) {\n\t\t\treturn this.customResultMapper(rows as unknown[][]);\n\t\t}\n\n\t\treturn (rows as unknown[][]).map((row) => mapResultRow(this.fields!, row, this.joinsNotNullableMap));\n\t}\n\n\tasync get(placeholderValues?: Record<string, unknown>): Promise<T['get']> {\n\t\tconst { fields, joinsNotNullableMap, query, logger, stmt, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\treturn stmt.bind(...params).all().then(({ results }) => results![0]);\n\t\t}\n\n\t\tconst rows = await this.values(placeholderValues);\n\n\t\tif (!rows[0]) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper(rows) as T['all'];\n\t\t}\n\n\t\treturn mapResultRow(fields!, rows[0], joinsNotNullableMap);\n\t}\n\n\toverride mapGetResult(result: unknown, isFromBatch?: boolean): unknown {\n\t\tif (isFromBatch) {\n\t\t\tresult = d1ToRawMapping((result as D1Result).results)[0];\n\t\t}\n\n\t\tif (!this.fields && !this.customResultMapper) {\n\t\t\treturn result;\n\t\t}\n\n\t\tif (this.customResultMapper) {\n\t\t\treturn this.customResultMapper([result as unknown[]]) as T['all'];\n\t\t}\n\n\t\treturn mapResultRow(this.fields!, result as unknown[], this.joinsNotNullableMap);\n\t}\n\n\tvalues<T extends any[] = unknown[]>(placeholderValues?: Record<string, unknown>): Promise<T[]> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\treturn this.stmt.bind(...params).raw();\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode(): boolean {\n\t\treturn this._isResponseInArrayMode;\n\t}\n}\n"],"mappings":"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","names":["builtQuery"]}
|
package/errors.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors.ts"],"sourcesContent":["import { entityKind } from '~/entity.ts';\n\nexport class DrizzleError extends Error {\n\tstatic readonly [entityKind]: string = 'DrizzleError';\n\n\tconstructor({ message, cause }: { message?: string; cause?: unknown }) {\n\t\tsuper(message);\n\t\tthis.name = 'DrizzleError';\n\t\tthis.cause = cause;\n\t}\n}\n\nexport class TransactionRollbackError extends DrizzleError {\n\tstatic readonly [entityKind]: string = 'TransactionRollbackError';\n\n\tconstructor() {\n\t\tsuper({ message: 'Rollback' });\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA2B;AAEpB,MAAM,qBAAqB,MAAM;AAAA,EACvC,QAAiB,wBAAU,IAAY;AAAA,EAEvC,YAAY,EAAE,SAAS,MAAM,GAA0C;AACtE,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,QAAQ;AAAA,EACd;AACD;AAEO,MAAM,iCAAiC,aAAa;AAAA,EAC1D,
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts"],"sourcesContent":["import { entityKind } from '~/entity.ts';\n\nexport class DrizzleError extends Error {\n\tstatic readonly [entityKind]: string = 'DrizzleError';\n\n\tconstructor({ message, cause }: { message?: string; cause?: unknown }) {\n\t\tsuper(message);\n\t\tthis.name = 'DrizzleError';\n\t\tthis.cause = cause;\n\t}\n}\n\nexport class TransactionRollbackError extends DrizzleError {\n\tstatic override readonly [entityKind]: string = 'TransactionRollbackError';\n\n\tconstructor() {\n\t\tsuper({ message: 'Rollback' });\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA2B;AAEpB,MAAM,qBAAqB,MAAM;AAAA,EACvC,QAAiB,wBAAU,IAAY;AAAA,EAEvC,YAAY,EAAE,SAAS,MAAM,GAA0C;AACtE,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,QAAQ;AAAA,EACd;AACD;AAEO,MAAM,iCAAiC,aAAa;AAAA,EAC1D,QAA0B,wBAAU,IAAY;AAAA,EAEhD,cAAc;AACb,UAAM,EAAE,SAAS,WAAW,CAAC;AAAA,EAC9B;AACD;","names":[]}
|
package/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors.ts"],"sourcesContent":["import { entityKind } from '~/entity.ts';\n\nexport class DrizzleError extends Error {\n\tstatic readonly [entityKind]: string = 'DrizzleError';\n\n\tconstructor({ message, cause }: { message?: string; cause?: unknown }) {\n\t\tsuper(message);\n\t\tthis.name = 'DrizzleError';\n\t\tthis.cause = cause;\n\t}\n}\n\nexport class TransactionRollbackError extends DrizzleError {\n\tstatic readonly [entityKind]: string = 'TransactionRollbackError';\n\n\tconstructor() {\n\t\tsuper({ message: 'Rollback' });\n\t}\n}\n"],"mappings":"AAAA,SAAS,kBAAkB;AAEpB,MAAM,qBAAqB,MAAM;AAAA,EACvC,QAAiB,UAAU,IAAY;AAAA,EAEvC,YAAY,EAAE,SAAS,MAAM,GAA0C;AACtE,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,QAAQ;AAAA,EACd;AACD;AAEO,MAAM,iCAAiC,aAAa;AAAA,EAC1D,
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts"],"sourcesContent":["import { entityKind } from '~/entity.ts';\n\nexport class DrizzleError extends Error {\n\tstatic readonly [entityKind]: string = 'DrizzleError';\n\n\tconstructor({ message, cause }: { message?: string; cause?: unknown }) {\n\t\tsuper(message);\n\t\tthis.name = 'DrizzleError';\n\t\tthis.cause = cause;\n\t}\n}\n\nexport class TransactionRollbackError extends DrizzleError {\n\tstatic override readonly [entityKind]: string = 'TransactionRollbackError';\n\n\tconstructor() {\n\t\tsuper({ message: 'Rollback' });\n\t}\n}\n"],"mappings":"AAAA,SAAS,kBAAkB;AAEpB,MAAM,qBAAqB,MAAM;AAAA,EACvC,QAAiB,UAAU,IAAY;AAAA,EAEvC,YAAY,EAAE,SAAS,MAAM,GAA0C;AACtE,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,QAAQ;AAAA,EACd;AACD;AAEO,MAAM,iCAAiC,aAAa;AAAA,EAC1D,QAA0B,UAAU,IAAY;AAAA,EAEhD,cAAc;AACb,UAAM,EAAE,SAAS,WAAW,CAAC;AAAA,EAC9B;AACD;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/expo-sqlite/driver.ts"],"sourcesContent":["import type { SQLiteDatabase, SQLiteRunResult } from 'expo-sqlite/next';\nimport { entityKind } from '~/entity.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport {\n\tcreateTableRelationsHelpers,\n\textractTablesRelationalConfig,\n\ttype RelationalSchemaConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport { BaseSQLiteDatabase } from '~/sqlite-core/db.ts';\nimport { SQLiteSyncDialect } from '~/sqlite-core/dialect.ts';\nimport type { DrizzleConfig } from '~/utils.ts';\nimport { ExpoSQLiteSession } from './session.ts';\n\nexport class ExpoSQLiteDatabase<TSchema extends Record<string, unknown> = Record<string, never>>\n\textends BaseSQLiteDatabase<'sync', SQLiteRunResult, TSchema>\n{\n\tstatic readonly [entityKind]: string = 'ExpoSQLiteDatabase';\n}\n\nexport function drizzle<TSchema extends Record<string, unknown> = Record<string, never>>(\n\tclient: SQLiteDatabase,\n\tconfig: DrizzleConfig<TSchema> = {},\n): ExpoSQLiteDatabase<TSchema> & {\n\t$client: SQLiteDatabase;\n} {\n\tconst dialect = new SQLiteSyncDialect({ 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 session = new ExpoSQLiteSession(client, dialect, schema, { logger });\n\tconst db = new ExpoSQLiteDatabase('sync', dialect, session, schema) as ExpoSQLiteDatabase<TSchema>;\n\t(<any> db).$client = client;\n\n\treturn db as any;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,oBAA2B;AAC3B,oBAA8B;AAC9B,uBAKO;AACP,gBAAmC;AACnC,qBAAkC;AAElC,qBAAkC;AAE3B,MAAM,2BACJ,6BACT;AAAA,EACC,
|
|
1
|
+
{"version":3,"sources":["../../src/expo-sqlite/driver.ts"],"sourcesContent":["import type { SQLiteDatabase, SQLiteRunResult } from 'expo-sqlite/next';\nimport { entityKind } from '~/entity.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport {\n\tcreateTableRelationsHelpers,\n\textractTablesRelationalConfig,\n\ttype RelationalSchemaConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport { BaseSQLiteDatabase } from '~/sqlite-core/db.ts';\nimport { SQLiteSyncDialect } from '~/sqlite-core/dialect.ts';\nimport type { DrizzleConfig } from '~/utils.ts';\nimport { ExpoSQLiteSession } from './session.ts';\n\nexport class ExpoSQLiteDatabase<TSchema extends Record<string, unknown> = Record<string, never>>\n\textends BaseSQLiteDatabase<'sync', SQLiteRunResult, TSchema>\n{\n\tstatic override readonly [entityKind]: string = 'ExpoSQLiteDatabase';\n}\n\nexport function drizzle<TSchema extends Record<string, unknown> = Record<string, never>>(\n\tclient: SQLiteDatabase,\n\tconfig: DrizzleConfig<TSchema> = {},\n): ExpoSQLiteDatabase<TSchema> & {\n\t$client: SQLiteDatabase;\n} {\n\tconst dialect = new SQLiteSyncDialect({ 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 session = new ExpoSQLiteSession(client, dialect, schema, { logger });\n\tconst db = new ExpoSQLiteDatabase('sync', dialect, session, schema) as ExpoSQLiteDatabase<TSchema>;\n\t(<any> db).$client = client;\n\n\treturn db as any;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,oBAA2B;AAC3B,oBAA8B;AAC9B,uBAKO;AACP,gBAAmC;AACnC,qBAAkC;AAElC,qBAAkC;AAE3B,MAAM,2BACJ,6BACT;AAAA,EACC,QAA0B,wBAAU,IAAY;AACjD;AAEO,SAAS,QACf,QACA,SAAiC,CAAC,GAGjC;AACD,QAAM,UAAU,IAAI,iCAAkB,EAAE,QAAQ,OAAO,OAAO,CAAC;AAC/D,MAAI;AACJ,MAAI,OAAO,WAAW,MAAM;AAC3B,aAAS,IAAI,4BAAc;AAAA,EAC5B,WAAW,OAAO,WAAW,OAAO;AACnC,aAAS,OAAO;AAAA,EACjB;AAEA,MAAI;AACJ,MAAI,OAAO,QAAQ;AAClB,UAAM,mBAAe;AAAA,MACpB,OAAO;AAAA,MACP;AAAA,IACD;AACA,aAAS;AAAA,MACR,YAAY,OAAO;AAAA,MACnB,QAAQ,aAAa;AAAA,MACrB,eAAe,aAAa;AAAA,IAC7B;AAAA,EACD;AAEA,QAAM,UAAU,IAAI,iCAAkB,QAAQ,SAAS,QAAQ,EAAE,OAAO,CAAC;AACzE,QAAM,KAAK,IAAI,mBAAmB,QAAQ,SAAS,SAAS,MAAM;AAClE,EAAO,GAAI,UAAU;AAErB,SAAO;AACR;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/expo-sqlite/driver.ts"],"sourcesContent":["import type { SQLiteDatabase, SQLiteRunResult } from 'expo-sqlite/next';\nimport { entityKind } from '~/entity.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport {\n\tcreateTableRelationsHelpers,\n\textractTablesRelationalConfig,\n\ttype RelationalSchemaConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport { BaseSQLiteDatabase } from '~/sqlite-core/db.ts';\nimport { SQLiteSyncDialect } from '~/sqlite-core/dialect.ts';\nimport type { DrizzleConfig } from '~/utils.ts';\nimport { ExpoSQLiteSession } from './session.ts';\n\nexport class ExpoSQLiteDatabase<TSchema extends Record<string, unknown> = Record<string, never>>\n\textends BaseSQLiteDatabase<'sync', SQLiteRunResult, TSchema>\n{\n\tstatic readonly [entityKind]: string = 'ExpoSQLiteDatabase';\n}\n\nexport function drizzle<TSchema extends Record<string, unknown> = Record<string, never>>(\n\tclient: SQLiteDatabase,\n\tconfig: DrizzleConfig<TSchema> = {},\n): ExpoSQLiteDatabase<TSchema> & {\n\t$client: SQLiteDatabase;\n} {\n\tconst dialect = new SQLiteSyncDialect({ 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 session = new ExpoSQLiteSession(client, dialect, schema, { logger });\n\tconst db = new ExpoSQLiteDatabase('sync', dialect, session, schema) as ExpoSQLiteDatabase<TSchema>;\n\t(<any> db).$client = client;\n\n\treturn db as any;\n}\n"],"mappings":"AACA,SAAS,kBAAkB;AAC3B,SAAS,qBAAqB;AAC9B;AAAA,EACC;AAAA,EACA;AAAA,OAGM;AACP,SAAS,0BAA0B;AACnC,SAAS,yBAAyB;AAElC,SAAS,yBAAyB;AAE3B,MAAM,2BACJ,mBACT;AAAA,EACC,
|
|
1
|
+
{"version":3,"sources":["../../src/expo-sqlite/driver.ts"],"sourcesContent":["import type { SQLiteDatabase, SQLiteRunResult } from 'expo-sqlite/next';\nimport { entityKind } from '~/entity.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport {\n\tcreateTableRelationsHelpers,\n\textractTablesRelationalConfig,\n\ttype RelationalSchemaConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport { BaseSQLiteDatabase } from '~/sqlite-core/db.ts';\nimport { SQLiteSyncDialect } from '~/sqlite-core/dialect.ts';\nimport type { DrizzleConfig } from '~/utils.ts';\nimport { ExpoSQLiteSession } from './session.ts';\n\nexport class ExpoSQLiteDatabase<TSchema extends Record<string, unknown> = Record<string, never>>\n\textends BaseSQLiteDatabase<'sync', SQLiteRunResult, TSchema>\n{\n\tstatic override readonly [entityKind]: string = 'ExpoSQLiteDatabase';\n}\n\nexport function drizzle<TSchema extends Record<string, unknown> = Record<string, never>>(\n\tclient: SQLiteDatabase,\n\tconfig: DrizzleConfig<TSchema> = {},\n): ExpoSQLiteDatabase<TSchema> & {\n\t$client: SQLiteDatabase;\n} {\n\tconst dialect = new SQLiteSyncDialect({ 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 session = new ExpoSQLiteSession(client, dialect, schema, { logger });\n\tconst db = new ExpoSQLiteDatabase('sync', dialect, session, schema) as ExpoSQLiteDatabase<TSchema>;\n\t(<any> db).$client = client;\n\n\treturn db as any;\n}\n"],"mappings":"AACA,SAAS,kBAAkB;AAC3B,SAAS,qBAAqB;AAC9B;AAAA,EACC;AAAA,EACA;AAAA,OAGM;AACP,SAAS,0BAA0B;AACnC,SAAS,yBAAyB;AAElC,SAAS,yBAAyB;AAE3B,MAAM,2BACJ,mBACT;AAAA,EACC,QAA0B,UAAU,IAAY;AACjD;AAEO,SAAS,QACf,QACA,SAAiC,CAAC,GAGjC;AACD,QAAM,UAAU,IAAI,kBAAkB,EAAE,QAAQ,OAAO,OAAO,CAAC;AAC/D,MAAI;AACJ,MAAI,OAAO,WAAW,MAAM;AAC3B,aAAS,IAAI,cAAc;AAAA,EAC5B,WAAW,OAAO,WAAW,OAAO;AACnC,aAAS,OAAO;AAAA,EACjB;AAEA,MAAI;AACJ,MAAI,OAAO,QAAQ;AAClB,UAAM,eAAe;AAAA,MACpB,OAAO;AAAA,MACP;AAAA,IACD;AACA,aAAS;AAAA,MACR,YAAY,OAAO;AAAA,MACnB,QAAQ,aAAa;AAAA,MACrB,eAAe,aAAa;AAAA,IAC7B;AAAA,EACD;AAEA,QAAM,UAAU,IAAI,kBAAkB,QAAQ,SAAS,QAAQ,EAAE,OAAO,CAAC;AACzE,QAAM,KAAK,IAAI,mBAAmB,QAAQ,SAAS,SAAS,MAAM;AAClE,EAAO,GAAI,UAAU;AAErB,SAAO;AACR;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/expo-sqlite/session.ts"],"sourcesContent":["import type { SQLiteDatabase, SQLiteRunResult, SQLiteStatement } from 'expo-sqlite/next';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { fillPlaceholders, type Query, sql } from '~/sql/sql.ts';\nimport type { SQLiteSyncDialect } from '~/sqlite-core/dialect.ts';\nimport { SQLiteTransaction } from '~/sqlite-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/sqlite-core/query-builders/select.types.ts';\nimport {\n\ttype PreparedQueryConfig as PreparedQueryConfigBase,\n\ttype SQLiteExecuteMethod,\n\tSQLitePreparedQuery,\n\tSQLiteSession,\n\ttype SQLiteTransactionConfig,\n} from '~/sqlite-core/session.ts';\nimport { mapResultRow } from '~/utils.ts';\n\nexport interface ExpoSQLiteSessionOptions {\n\tlogger?: Logger;\n}\n\ntype PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\n\nexport class ExpoSQLiteSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteSession<'sync', SQLiteRunResult, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'ExpoSQLiteSession';\n\n\tprivate logger: Logger;\n\n\tconstructor(\n\t\tprivate client: SQLiteDatabase,\n\t\tdialect: SQLiteSyncDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\toptions: ExpoSQLiteSessionOptions = {},\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t}\n\n\tprepareQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => unknown,\n\t): ExpoSQLitePreparedQuery<T> {\n\t\tconst stmt = this.client.prepareSync(query.sql);\n\t\treturn new ExpoSQLitePreparedQuery(\n\t\t\tstmt,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\texecuteMethod,\n\t\t\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t);\n\t}\n\n\toverride transaction<T>(\n\t\ttransaction: (tx: ExpoSQLiteTransaction<TFullSchema, TSchema>) => T,\n\t\tconfig: SQLiteTransactionConfig = {},\n\t): T {\n\t\tconst tx = new ExpoSQLiteTransaction('sync', this.dialect, this, this.schema);\n\t\tthis.run(sql.raw(`begin${config?.behavior ? ' ' + config.behavior : ''}`));\n\t\ttry {\n\t\t\tconst result = transaction(tx);\n\t\t\tthis.run(sql`commit`);\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tthis.run(sql`rollback`);\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport class ExpoSQLiteTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteTransaction<'sync', SQLiteRunResult, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'ExpoSQLiteTransaction';\n\n\toverride transaction<T>(transaction: (tx: ExpoSQLiteTransaction<TFullSchema, TSchema>) => T): T {\n\t\tconst savepointName = `sp${this.nestedIndex}`;\n\t\tconst tx = new ExpoSQLiteTransaction('sync', this.dialect, this.session, this.schema, this.nestedIndex + 1);\n\t\tthis.session.run(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = transaction(tx);\n\t\t\tthis.session.run(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tthis.session.run(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport class ExpoSQLitePreparedQuery<T extends PreparedQueryConfig = PreparedQueryConfig> extends SQLitePreparedQuery<\n\t{ type: 'sync'; run: SQLiteRunResult; all: T['all']; get: T['get']; values: T['values']; execute: T['execute'] }\n> {\n\tstatic readonly [entityKind]: string = 'ExpoSQLitePreparedQuery';\n\n\tconstructor(\n\t\tprivate stmt: SQLiteStatement,\n\t\tquery: Query,\n\t\tprivate logger: Logger,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tprivate _isResponseInArrayMode: boolean,\n\t\tprivate customResultMapper?: (rows: unknown[][]) => unknown,\n\t) {\n\t\tsuper('sync', executeMethod, query);\n\t}\n\n\trun(placeholderValues?: Record<string, unknown>): SQLiteRunResult {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\tconst { changes, lastInsertRowId } = this.stmt.executeSync(params as any[]);\n\t\treturn {\n\t\t\tchanges,\n\t\t\tlastInsertRowId,\n\t\t};\n\t}\n\n\tall(placeholderValues?: Record<string, unknown>): T['all'] {\n\t\tconst { fields, joinsNotNullableMap, query, logger, stmt, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\treturn stmt.executeSync(params as any[]).getAllSync();\n\t\t}\n\n\t\tconst rows = this.values(placeholderValues) as unknown[][];\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper(rows) as T['all'];\n\t\t}\n\t\treturn rows.map((row) => mapResultRow(fields!, row, joinsNotNullableMap));\n\t}\n\n\tget(placeholderValues?: Record<string, unknown>): T['get'] {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\n\t\tconst { fields, stmt, joinsNotNullableMap, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\treturn stmt.executeSync(params as any[]).getFirstSync();\n\t\t}\n\n\t\tconst rows = this.values(placeholderValues) as unknown[][];\n\t\tconst row = rows[0];\n\n\t\tif (!row) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper(rows) as T['get'];\n\t\t}\n\n\t\treturn mapResultRow(fields!, row, joinsNotNullableMap);\n\t}\n\n\tvalues(placeholderValues?: Record<string, unknown>): T['values'] {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\treturn this.stmt.executeForRawResultSync(params as any[]).getAllSync();\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode(): boolean {\n\t\treturn this._isResponseInArrayMode;\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,oBAA2B;AAE3B,oBAA2B;AAE3B,iBAAkD;AAElD,yBAAkC;AAElC,qBAMO;AACP,mBAA6B;AAQtB,MAAM,0BAGH,6BAA6D;AAAA,EAKtE,YACS,QACR,SACQ,QACR,UAAoC,CAAC,GACpC;AACD,UAAM,OAAO;AALL;AAEA;AAIR,SAAK,SAAS,QAAQ,UAAU,IAAI,yBAAW;AAAA,EAChD;AAAA,EAZA,
|
|
1
|
+
{"version":3,"sources":["../../src/expo-sqlite/session.ts"],"sourcesContent":["import type { SQLiteDatabase, SQLiteRunResult, SQLiteStatement } from 'expo-sqlite/next';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { fillPlaceholders, type Query, sql } from '~/sql/sql.ts';\nimport type { SQLiteSyncDialect } from '~/sqlite-core/dialect.ts';\nimport { SQLiteTransaction } from '~/sqlite-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/sqlite-core/query-builders/select.types.ts';\nimport {\n\ttype PreparedQueryConfig as PreparedQueryConfigBase,\n\ttype SQLiteExecuteMethod,\n\tSQLitePreparedQuery,\n\tSQLiteSession,\n\ttype SQLiteTransactionConfig,\n} from '~/sqlite-core/session.ts';\nimport { mapResultRow } from '~/utils.ts';\n\nexport interface ExpoSQLiteSessionOptions {\n\tlogger?: Logger;\n}\n\ntype PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\n\nexport class ExpoSQLiteSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteSession<'sync', SQLiteRunResult, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'ExpoSQLiteSession';\n\n\tprivate logger: Logger;\n\n\tconstructor(\n\t\tprivate client: SQLiteDatabase,\n\t\tdialect: SQLiteSyncDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\toptions: ExpoSQLiteSessionOptions = {},\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t}\n\n\tprepareQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => unknown,\n\t): ExpoSQLitePreparedQuery<T> {\n\t\tconst stmt = this.client.prepareSync(query.sql);\n\t\treturn new ExpoSQLitePreparedQuery(\n\t\t\tstmt,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\texecuteMethod,\n\t\t\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t);\n\t}\n\n\toverride transaction<T>(\n\t\ttransaction: (tx: ExpoSQLiteTransaction<TFullSchema, TSchema>) => T,\n\t\tconfig: SQLiteTransactionConfig = {},\n\t): T {\n\t\tconst tx = new ExpoSQLiteTransaction('sync', this.dialect, this, this.schema);\n\t\tthis.run(sql.raw(`begin${config?.behavior ? ' ' + config.behavior : ''}`));\n\t\ttry {\n\t\t\tconst result = transaction(tx);\n\t\t\tthis.run(sql`commit`);\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tthis.run(sql`rollback`);\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport class ExpoSQLiteTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteTransaction<'sync', SQLiteRunResult, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'ExpoSQLiteTransaction';\n\n\toverride transaction<T>(transaction: (tx: ExpoSQLiteTransaction<TFullSchema, TSchema>) => T): T {\n\t\tconst savepointName = `sp${this.nestedIndex}`;\n\t\tconst tx = new ExpoSQLiteTransaction('sync', this.dialect, this.session, this.schema, this.nestedIndex + 1);\n\t\tthis.session.run(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = transaction(tx);\n\t\t\tthis.session.run(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tthis.session.run(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport class ExpoSQLitePreparedQuery<T extends PreparedQueryConfig = PreparedQueryConfig> extends SQLitePreparedQuery<\n\t{ type: 'sync'; run: SQLiteRunResult; all: T['all']; get: T['get']; values: T['values']; execute: T['execute'] }\n> {\n\tstatic override readonly [entityKind]: string = 'ExpoSQLitePreparedQuery';\n\n\tconstructor(\n\t\tprivate stmt: SQLiteStatement,\n\t\tquery: Query,\n\t\tprivate logger: Logger,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tprivate _isResponseInArrayMode: boolean,\n\t\tprivate customResultMapper?: (rows: unknown[][]) => unknown,\n\t) {\n\t\tsuper('sync', executeMethod, query);\n\t}\n\n\trun(placeholderValues?: Record<string, unknown>): SQLiteRunResult {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\tconst { changes, lastInsertRowId } = this.stmt.executeSync(params as any[]);\n\t\treturn {\n\t\t\tchanges,\n\t\t\tlastInsertRowId,\n\t\t};\n\t}\n\n\tall(placeholderValues?: Record<string, unknown>): T['all'] {\n\t\tconst { fields, joinsNotNullableMap, query, logger, stmt, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\treturn stmt.executeSync(params as any[]).getAllSync();\n\t\t}\n\n\t\tconst rows = this.values(placeholderValues) as unknown[][];\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper(rows) as T['all'];\n\t\t}\n\t\treturn rows.map((row) => mapResultRow(fields!, row, joinsNotNullableMap));\n\t}\n\n\tget(placeholderValues?: Record<string, unknown>): T['get'] {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\n\t\tconst { fields, stmt, joinsNotNullableMap, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\treturn stmt.executeSync(params as any[]).getFirstSync();\n\t\t}\n\n\t\tconst rows = this.values(placeholderValues) as unknown[][];\n\t\tconst row = rows[0];\n\n\t\tif (!row) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper(rows) as T['get'];\n\t\t}\n\n\t\treturn mapResultRow(fields!, row, joinsNotNullableMap);\n\t}\n\n\tvalues(placeholderValues?: Record<string, unknown>): T['values'] {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\treturn this.stmt.executeForRawResultSync(params as any[]).getAllSync();\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode(): boolean {\n\t\treturn this._isResponseInArrayMode;\n\t}\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/expo-sqlite/session.ts"],"sourcesContent":["import type { SQLiteDatabase, SQLiteRunResult, SQLiteStatement } from 'expo-sqlite/next';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { fillPlaceholders, type Query, sql } from '~/sql/sql.ts';\nimport type { SQLiteSyncDialect } from '~/sqlite-core/dialect.ts';\nimport { SQLiteTransaction } from '~/sqlite-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/sqlite-core/query-builders/select.types.ts';\nimport {\n\ttype PreparedQueryConfig as PreparedQueryConfigBase,\n\ttype SQLiteExecuteMethod,\n\tSQLitePreparedQuery,\n\tSQLiteSession,\n\ttype SQLiteTransactionConfig,\n} from '~/sqlite-core/session.ts';\nimport { mapResultRow } from '~/utils.ts';\n\nexport interface ExpoSQLiteSessionOptions {\n\tlogger?: Logger;\n}\n\ntype PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\n\nexport class ExpoSQLiteSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteSession<'sync', SQLiteRunResult, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'ExpoSQLiteSession';\n\n\tprivate logger: Logger;\n\n\tconstructor(\n\t\tprivate client: SQLiteDatabase,\n\t\tdialect: SQLiteSyncDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\toptions: ExpoSQLiteSessionOptions = {},\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t}\n\n\tprepareQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => unknown,\n\t): ExpoSQLitePreparedQuery<T> {\n\t\tconst stmt = this.client.prepareSync(query.sql);\n\t\treturn new ExpoSQLitePreparedQuery(\n\t\t\tstmt,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\texecuteMethod,\n\t\t\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t);\n\t}\n\n\toverride transaction<T>(\n\t\ttransaction: (tx: ExpoSQLiteTransaction<TFullSchema, TSchema>) => T,\n\t\tconfig: SQLiteTransactionConfig = {},\n\t): T {\n\t\tconst tx = new ExpoSQLiteTransaction('sync', this.dialect, this, this.schema);\n\t\tthis.run(sql.raw(`begin${config?.behavior ? ' ' + config.behavior : ''}`));\n\t\ttry {\n\t\t\tconst result = transaction(tx);\n\t\t\tthis.run(sql`commit`);\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tthis.run(sql`rollback`);\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport class ExpoSQLiteTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteTransaction<'sync', SQLiteRunResult, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'ExpoSQLiteTransaction';\n\n\toverride transaction<T>(transaction: (tx: ExpoSQLiteTransaction<TFullSchema, TSchema>) => T): T {\n\t\tconst savepointName = `sp${this.nestedIndex}`;\n\t\tconst tx = new ExpoSQLiteTransaction('sync', this.dialect, this.session, this.schema, this.nestedIndex + 1);\n\t\tthis.session.run(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = transaction(tx);\n\t\t\tthis.session.run(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tthis.session.run(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport class ExpoSQLitePreparedQuery<T extends PreparedQueryConfig = PreparedQueryConfig> extends SQLitePreparedQuery<\n\t{ type: 'sync'; run: SQLiteRunResult; all: T['all']; get: T['get']; values: T['values']; execute: T['execute'] }\n> {\n\tstatic readonly [entityKind]: string = 'ExpoSQLitePreparedQuery';\n\n\tconstructor(\n\t\tprivate stmt: SQLiteStatement,\n\t\tquery: Query,\n\t\tprivate logger: Logger,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tprivate _isResponseInArrayMode: boolean,\n\t\tprivate customResultMapper?: (rows: unknown[][]) => unknown,\n\t) {\n\t\tsuper('sync', executeMethod, query);\n\t}\n\n\trun(placeholderValues?: Record<string, unknown>): SQLiteRunResult {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\tconst { changes, lastInsertRowId } = this.stmt.executeSync(params as any[]);\n\t\treturn {\n\t\t\tchanges,\n\t\t\tlastInsertRowId,\n\t\t};\n\t}\n\n\tall(placeholderValues?: Record<string, unknown>): T['all'] {\n\t\tconst { fields, joinsNotNullableMap, query, logger, stmt, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\treturn stmt.executeSync(params as any[]).getAllSync();\n\t\t}\n\n\t\tconst rows = this.values(placeholderValues) as unknown[][];\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper(rows) as T['all'];\n\t\t}\n\t\treturn rows.map((row) => mapResultRow(fields!, row, joinsNotNullableMap));\n\t}\n\n\tget(placeholderValues?: Record<string, unknown>): T['get'] {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\n\t\tconst { fields, stmt, joinsNotNullableMap, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\treturn stmt.executeSync(params as any[]).getFirstSync();\n\t\t}\n\n\t\tconst rows = this.values(placeholderValues) as unknown[][];\n\t\tconst row = rows[0];\n\n\t\tif (!row) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper(rows) as T['get'];\n\t\t}\n\n\t\treturn mapResultRow(fields!, row, joinsNotNullableMap);\n\t}\n\n\tvalues(placeholderValues?: Record<string, unknown>): T['values'] {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\treturn this.stmt.executeForRawResultSync(params as any[]).getAllSync();\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode(): boolean {\n\t\treturn this._isResponseInArrayMode;\n\t}\n}\n"],"mappings":"AACA,SAAS,kBAAkB;AAE3B,SAAS,kBAAkB;AAE3B,SAAS,kBAA8B,WAAW;AAElD,SAAS,yBAAyB;AAElC;AAAA,EAGC;AAAA,EACA;AAAA,OAEM;AACP,SAAS,oBAAoB;AAQtB,MAAM,0BAGH,cAA6D;AAAA,EAKtE,YACS,QACR,SACQ,QACR,UAAoC,CAAC,GACpC;AACD,UAAM,OAAO;AALL;AAEA;AAIR,SAAK,SAAS,QAAQ,UAAU,IAAI,WAAW;AAAA,EAChD;AAAA,EAZA,
|
|
1
|
+
{"version":3,"sources":["../../src/expo-sqlite/session.ts"],"sourcesContent":["import type { SQLiteDatabase, SQLiteRunResult, SQLiteStatement } from 'expo-sqlite/next';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { fillPlaceholders, type Query, sql } from '~/sql/sql.ts';\nimport type { SQLiteSyncDialect } from '~/sqlite-core/dialect.ts';\nimport { SQLiteTransaction } from '~/sqlite-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/sqlite-core/query-builders/select.types.ts';\nimport {\n\ttype PreparedQueryConfig as PreparedQueryConfigBase,\n\ttype SQLiteExecuteMethod,\n\tSQLitePreparedQuery,\n\tSQLiteSession,\n\ttype SQLiteTransactionConfig,\n} from '~/sqlite-core/session.ts';\nimport { mapResultRow } from '~/utils.ts';\n\nexport interface ExpoSQLiteSessionOptions {\n\tlogger?: Logger;\n}\n\ntype PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\n\nexport class ExpoSQLiteSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteSession<'sync', SQLiteRunResult, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'ExpoSQLiteSession';\n\n\tprivate logger: Logger;\n\n\tconstructor(\n\t\tprivate client: SQLiteDatabase,\n\t\tdialect: SQLiteSyncDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\toptions: ExpoSQLiteSessionOptions = {},\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t}\n\n\tprepareQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => unknown,\n\t): ExpoSQLitePreparedQuery<T> {\n\t\tconst stmt = this.client.prepareSync(query.sql);\n\t\treturn new ExpoSQLitePreparedQuery(\n\t\t\tstmt,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\texecuteMethod,\n\t\t\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t);\n\t}\n\n\toverride transaction<T>(\n\t\ttransaction: (tx: ExpoSQLiteTransaction<TFullSchema, TSchema>) => T,\n\t\tconfig: SQLiteTransactionConfig = {},\n\t): T {\n\t\tconst tx = new ExpoSQLiteTransaction('sync', this.dialect, this, this.schema);\n\t\tthis.run(sql.raw(`begin${config?.behavior ? ' ' + config.behavior : ''}`));\n\t\ttry {\n\t\t\tconst result = transaction(tx);\n\t\t\tthis.run(sql`commit`);\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tthis.run(sql`rollback`);\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport class ExpoSQLiteTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteTransaction<'sync', SQLiteRunResult, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'ExpoSQLiteTransaction';\n\n\toverride transaction<T>(transaction: (tx: ExpoSQLiteTransaction<TFullSchema, TSchema>) => T): T {\n\t\tconst savepointName = `sp${this.nestedIndex}`;\n\t\tconst tx = new ExpoSQLiteTransaction('sync', this.dialect, this.session, this.schema, this.nestedIndex + 1);\n\t\tthis.session.run(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = transaction(tx);\n\t\t\tthis.session.run(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tthis.session.run(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport class ExpoSQLitePreparedQuery<T extends PreparedQueryConfig = PreparedQueryConfig> extends SQLitePreparedQuery<\n\t{ type: 'sync'; run: SQLiteRunResult; all: T['all']; get: T['get']; values: T['values']; execute: T['execute'] }\n> {\n\tstatic override readonly [entityKind]: string = 'ExpoSQLitePreparedQuery';\n\n\tconstructor(\n\t\tprivate stmt: SQLiteStatement,\n\t\tquery: Query,\n\t\tprivate logger: Logger,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tprivate _isResponseInArrayMode: boolean,\n\t\tprivate customResultMapper?: (rows: unknown[][]) => unknown,\n\t) {\n\t\tsuper('sync', executeMethod, query);\n\t}\n\n\trun(placeholderValues?: Record<string, unknown>): SQLiteRunResult {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\tconst { changes, lastInsertRowId } = this.stmt.executeSync(params as any[]);\n\t\treturn {\n\t\t\tchanges,\n\t\t\tlastInsertRowId,\n\t\t};\n\t}\n\n\tall(placeholderValues?: Record<string, unknown>): T['all'] {\n\t\tconst { fields, joinsNotNullableMap, query, logger, stmt, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\treturn stmt.executeSync(params as any[]).getAllSync();\n\t\t}\n\n\t\tconst rows = this.values(placeholderValues) as unknown[][];\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper(rows) as T['all'];\n\t\t}\n\t\treturn rows.map((row) => mapResultRow(fields!, row, joinsNotNullableMap));\n\t}\n\n\tget(placeholderValues?: Record<string, unknown>): T['get'] {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\n\t\tconst { fields, stmt, joinsNotNullableMap, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\treturn stmt.executeSync(params as any[]).getFirstSync();\n\t\t}\n\n\t\tconst rows = this.values(placeholderValues) as unknown[][];\n\t\tconst row = rows[0];\n\n\t\tif (!row) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper(rows) as T['get'];\n\t\t}\n\n\t\treturn mapResultRow(fields!, row, joinsNotNullableMap);\n\t}\n\n\tvalues(placeholderValues?: Record<string, unknown>): T['values'] {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\treturn this.stmt.executeForRawResultSync(params as any[]).getAllSync();\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode(): boolean {\n\t\treturn this._isResponseInArrayMode;\n\t}\n}\n"],"mappings":"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","names":[]}
|
package/libsql/driver.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/libsql/driver.ts"],"sourcesContent":["import type { Client, ResultSet } from '@libsql/client';\nimport type { BatchItem, BatchResponse } from '~/batch.ts';\nimport { entityKind } from '~/entity.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport {\n\tcreateTableRelationsHelpers,\n\textractTablesRelationalConfig,\n\ttype ExtractTablesWithRelations,\n\ttype RelationalSchemaConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport { BaseSQLiteDatabase } from '~/sqlite-core/db.ts';\nimport { SQLiteAsyncDialect } from '~/sqlite-core/dialect.ts';\nimport type { DrizzleConfig } from '~/utils.ts';\nimport { LibSQLSession } from './session.ts';\n\nexport class LibSQLDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> extends BaseSQLiteDatabase<'async', ResultSet, TSchema> {\n\tstatic readonly [entityKind]: string = 'LibSQLDatabase';\n\n\t/** @internal */\n\tdeclare readonly session: LibSQLSession<TSchema, ExtractTablesWithRelations<TSchema>>;\n\n\tasync batch<U extends BatchItem<'sqlite'>, 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\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n>(client: Client, config: DrizzleConfig<TSchema> = {}): LibSQLDatabase<TSchema> & {\n\t$client: Client;\n} {\n\tconst dialect = new SQLiteAsyncDialect({ 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 session = new LibSQLSession(client, dialect, schema, { logger }, undefined);\n\tconst db = new LibSQLDatabase('async', dialect, session, schema) as LibSQLDatabase<TSchema>;\n\t(<any> db).$client = client;\n\n\treturn db as any;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,oBAA2B;AAC3B,oBAA8B;AAC9B,uBAMO;AACP,gBAAmC;AACnC,qBAAmC;AAEnC,qBAA8B;AAEvB,MAAM,uBAEH,6BAAgD;AAAA,EACzD,
|
|
1
|
+
{"version":3,"sources":["../../src/libsql/driver.ts"],"sourcesContent":["import type { Client, ResultSet } from '@libsql/client';\nimport type { BatchItem, BatchResponse } from '~/batch.ts';\nimport { entityKind } from '~/entity.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport {\n\tcreateTableRelationsHelpers,\n\textractTablesRelationalConfig,\n\ttype ExtractTablesWithRelations,\n\ttype RelationalSchemaConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport { BaseSQLiteDatabase } from '~/sqlite-core/db.ts';\nimport { SQLiteAsyncDialect } from '~/sqlite-core/dialect.ts';\nimport type { DrizzleConfig } from '~/utils.ts';\nimport { LibSQLSession } from './session.ts';\n\nexport class LibSQLDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> extends BaseSQLiteDatabase<'async', ResultSet, TSchema> {\n\tstatic override readonly [entityKind]: string = 'LibSQLDatabase';\n\n\t/** @internal */\n\tdeclare readonly session: LibSQLSession<TSchema, ExtractTablesWithRelations<TSchema>>;\n\n\tasync batch<U extends BatchItem<'sqlite'>, 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\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n>(client: Client, config: DrizzleConfig<TSchema> = {}): LibSQLDatabase<TSchema> & {\n\t$client: Client;\n} {\n\tconst dialect = new SQLiteAsyncDialect({ 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 session = new LibSQLSession(client, dialect, schema, { logger }, undefined);\n\tconst db = new LibSQLDatabase('async', dialect, session, schema) as LibSQLDatabase<TSchema>;\n\t(<any> db).$client = client;\n\n\treturn db as any;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,oBAA2B;AAC3B,oBAA8B;AAC9B,uBAMO;AACP,gBAAmC;AACnC,qBAAmC;AAEnC,qBAA8B;AAEvB,MAAM,uBAEH,6BAAgD;AAAA,EACzD,QAA0B,wBAAU,IAAY;AAAA,EAKhD,MAAM,MACL,OAC4B;AAC5B,WAAO,KAAK,QAAQ,MAAM,KAAK;AAAA,EAChC;AACD;AAEO,SAAS,QAEd,QAAgB,SAAiC,CAAC,GAElD;AACD,QAAM,UAAU,IAAI,kCAAmB,EAAE,QAAQ,OAAO,OAAO,CAAC;AAChE,MAAI;AACJ,MAAI,OAAO,WAAW,MAAM;AAC3B,aAAS,IAAI,4BAAc;AAAA,EAC5B,WAAW,OAAO,WAAW,OAAO;AACnC,aAAS,OAAO;AAAA,EACjB;AAEA,MAAI;AACJ,MAAI,OAAO,QAAQ;AAClB,UAAM,mBAAe;AAAA,MACpB,OAAO;AAAA,MACP;AAAA,IACD;AACA,aAAS;AAAA,MACR,YAAY,OAAO;AAAA,MACnB,QAAQ,aAAa;AAAA,MACrB,eAAe,aAAa;AAAA,IAC7B;AAAA,EACD;AAEA,QAAM,UAAU,IAAI,6BAAc,QAAQ,SAAS,QAAQ,EAAE,OAAO,GAAG,MAAS;AAChF,QAAM,KAAK,IAAI,eAAe,SAAS,SAAS,SAAS,MAAM;AAC/D,EAAO,GAAI,UAAU;AAErB,SAAO;AACR;","names":[]}
|
package/libsql/driver.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/libsql/driver.ts"],"sourcesContent":["import type { Client, ResultSet } from '@libsql/client';\nimport type { BatchItem, BatchResponse } from '~/batch.ts';\nimport { entityKind } from '~/entity.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport {\n\tcreateTableRelationsHelpers,\n\textractTablesRelationalConfig,\n\ttype ExtractTablesWithRelations,\n\ttype RelationalSchemaConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport { BaseSQLiteDatabase } from '~/sqlite-core/db.ts';\nimport { SQLiteAsyncDialect } from '~/sqlite-core/dialect.ts';\nimport type { DrizzleConfig } from '~/utils.ts';\nimport { LibSQLSession } from './session.ts';\n\nexport class LibSQLDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> extends BaseSQLiteDatabase<'async', ResultSet, TSchema> {\n\tstatic readonly [entityKind]: string = 'LibSQLDatabase';\n\n\t/** @internal */\n\tdeclare readonly session: LibSQLSession<TSchema, ExtractTablesWithRelations<TSchema>>;\n\n\tasync batch<U extends BatchItem<'sqlite'>, 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\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n>(client: Client, config: DrizzleConfig<TSchema> = {}): LibSQLDatabase<TSchema> & {\n\t$client: Client;\n} {\n\tconst dialect = new SQLiteAsyncDialect({ 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 session = new LibSQLSession(client, dialect, schema, { logger }, undefined);\n\tconst db = new LibSQLDatabase('async', dialect, session, schema) as LibSQLDatabase<TSchema>;\n\t(<any> db).$client = client;\n\n\treturn db as any;\n}\n"],"mappings":"AAEA,SAAS,kBAAkB;AAC3B,SAAS,qBAAqB;AAC9B;AAAA,EACC;AAAA,EACA;AAAA,OAIM;AACP,SAAS,0BAA0B;AACnC,SAAS,0BAA0B;AAEnC,SAAS,qBAAqB;AAEvB,MAAM,uBAEH,mBAAgD;AAAA,EACzD,
|
|
1
|
+
{"version":3,"sources":["../../src/libsql/driver.ts"],"sourcesContent":["import type { Client, ResultSet } from '@libsql/client';\nimport type { BatchItem, BatchResponse } from '~/batch.ts';\nimport { entityKind } from '~/entity.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport {\n\tcreateTableRelationsHelpers,\n\textractTablesRelationalConfig,\n\ttype ExtractTablesWithRelations,\n\ttype RelationalSchemaConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport { BaseSQLiteDatabase } from '~/sqlite-core/db.ts';\nimport { SQLiteAsyncDialect } from '~/sqlite-core/dialect.ts';\nimport type { DrizzleConfig } from '~/utils.ts';\nimport { LibSQLSession } from './session.ts';\n\nexport class LibSQLDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> extends BaseSQLiteDatabase<'async', ResultSet, TSchema> {\n\tstatic override readonly [entityKind]: string = 'LibSQLDatabase';\n\n\t/** @internal */\n\tdeclare readonly session: LibSQLSession<TSchema, ExtractTablesWithRelations<TSchema>>;\n\n\tasync batch<U extends BatchItem<'sqlite'>, 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\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n>(client: Client, config: DrizzleConfig<TSchema> = {}): LibSQLDatabase<TSchema> & {\n\t$client: Client;\n} {\n\tconst dialect = new SQLiteAsyncDialect({ 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 session = new LibSQLSession(client, dialect, schema, { logger }, undefined);\n\tconst db = new LibSQLDatabase('async', dialect, session, schema) as LibSQLDatabase<TSchema>;\n\t(<any> db).$client = client;\n\n\treturn db as any;\n}\n"],"mappings":"AAEA,SAAS,kBAAkB;AAC3B,SAAS,qBAAqB;AAC9B;AAAA,EACC;AAAA,EACA;AAAA,OAIM;AACP,SAAS,0BAA0B;AACnC,SAAS,0BAA0B;AAEnC,SAAS,qBAAqB;AAEvB,MAAM,uBAEH,mBAAgD;AAAA,EACzD,QAA0B,UAAU,IAAY;AAAA,EAKhD,MAAM,MACL,OAC4B;AAC5B,WAAO,KAAK,QAAQ,MAAM,KAAK;AAAA,EAChC;AACD;AAEO,SAAS,QAEd,QAAgB,SAAiC,CAAC,GAElD;AACD,QAAM,UAAU,IAAI,mBAAmB,EAAE,QAAQ,OAAO,OAAO,CAAC;AAChE,MAAI;AACJ,MAAI,OAAO,WAAW,MAAM;AAC3B,aAAS,IAAI,cAAc;AAAA,EAC5B,WAAW,OAAO,WAAW,OAAO;AACnC,aAAS,OAAO;AAAA,EACjB;AAEA,MAAI;AACJ,MAAI,OAAO,QAAQ;AAClB,UAAM,eAAe;AAAA,MACpB,OAAO;AAAA,MACP;AAAA,IACD;AACA,aAAS;AAAA,MACR,YAAY,OAAO;AAAA,MACnB,QAAQ,aAAa;AAAA,MACrB,eAAe,aAAa;AAAA,IAC7B;AAAA,EACD;AAEA,QAAM,UAAU,IAAI,cAAc,QAAQ,SAAS,QAAQ,EAAE,OAAO,GAAG,MAAS;AAChF,QAAM,KAAK,IAAI,eAAe,SAAS,SAAS,SAAS,MAAM;AAC/D,EAAO,GAAI,UAAU;AAErB,SAAO;AACR;","names":[]}
|
package/libsql/session.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/libsql/session.ts"],"sourcesContent":["import type { Client, InArgs, InStatement, ResultSet, Transaction } from '@libsql/client';\nimport type { BatchItem as BatchItem } from '~/batch.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport type { PreparedQuery } from '~/session.ts';\nimport { fillPlaceholders, type Query, sql } from '~/sql/sql.ts';\nimport type { SQLiteAsyncDialect } from '~/sqlite-core/dialect.ts';\nimport { SQLiteTransaction } from '~/sqlite-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/sqlite-core/query-builders/select.types.ts';\nimport type {\n\tPreparedQueryConfig as PreparedQueryConfigBase,\n\tSQLiteExecuteMethod,\n\tSQLiteTransactionConfig,\n} from '~/sqlite-core/session.ts';\nimport { SQLitePreparedQuery, SQLiteSession } from '~/sqlite-core/session.ts';\nimport { mapResultRow } from '~/utils.ts';\n\nexport interface LibSQLSessionOptions {\n\tlogger?: Logger;\n}\n\ntype PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\n\nexport class LibSQLSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteSession<'async', ResultSet, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'LibSQLSession';\n\n\tprivate logger: Logger;\n\n\tconstructor(\n\t\tprivate client: Client,\n\t\tdialect: SQLiteAsyncDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: LibSQLSessionOptions,\n\t\tprivate tx: Transaction | undefined,\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t}\n\n\tprepareQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => unknown,\n\t): LibSQLPreparedQuery<T> {\n\t\treturn new LibSQLPreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\tthis.tx,\n\t\t\texecuteMethod,\n\t\t\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t);\n\t}\n\n\tasync batch<T extends BatchItem<'sqlite'>[] | readonly BatchItem<'sqlite'>[]>(queries: T) {\n\t\tconst preparedQueries: PreparedQuery[] = [];\n\t\tconst builtQueries: InStatement[] = [];\n\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({ sql: builtQuery.sql, args: builtQuery.params as InArgs });\n\t\t}\n\n\t\tconst batchResults = await this.client.batch(builtQueries);\n\t\treturn batchResults.map((result, i) => preparedQueries[i]!.mapResult(result, true));\n\t}\n\n\tasync migrate<T extends BatchItem<'sqlite'>[] | readonly BatchItem<'sqlite'>[]>(queries: T) {\n\t\tconst preparedQueries: PreparedQuery[] = [];\n\t\tconst builtQueries: InStatement[] = [];\n\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({ sql: builtQuery.sql, args: builtQuery.params as InArgs });\n\t\t}\n\n\t\tconst batchResults = await this.client.migrate(builtQueries);\n\t\treturn batchResults.map((result, i) => preparedQueries[i]!.mapResult(result, true));\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (db: LibSQLTransaction<TFullSchema, TSchema>) => T | Promise<T>,\n\t\t_config?: SQLiteTransactionConfig,\n\t): Promise<T> {\n\t\t// TODO: support transaction behavior\n\t\tconst libsqlTx = await this.client.transaction();\n\t\tconst session = new LibSQLSession<TFullSchema, TSchema>(\n\t\t\tthis.client,\n\t\t\tthis.dialect,\n\t\t\tthis.schema,\n\t\t\tthis.options,\n\t\t\tlibsqlTx,\n\t\t);\n\t\tconst tx = new LibSQLTransaction<TFullSchema, TSchema>('async', this.dialect, session, this.schema);\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait libsqlTx.commit();\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait libsqlTx.rollback();\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\toverride extractRawAllValueFromBatchResult(result: unknown): unknown {\n\t\treturn (result as ResultSet).rows;\n\t}\n\n\toverride extractRawGetValueFromBatchResult(result: unknown): unknown {\n\t\treturn (result as ResultSet).rows[0];\n\t}\n\n\toverride extractRawValuesValueFromBatchResult(result: unknown): unknown {\n\t\treturn (result as ResultSet).rows;\n\t}\n}\n\nexport class LibSQLTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteTransaction<'async', ResultSet, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'LibSQLTransaction';\n\n\toverride async transaction<T>(transaction: (tx: LibSQLTransaction<TFullSchema, TSchema>) => Promise<T>): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex}`;\n\t\tconst tx = new LibSQLTransaction('async', this.dialect, this.session, this.schema, this.nestedIndex + 1);\n\t\tawait this.session.run(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait this.session.run(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait this.session.run(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport class LibSQLPreparedQuery<T extends PreparedQueryConfig = PreparedQueryConfig> extends SQLitePreparedQuery<\n\t{ type: 'async'; run: ResultSet; all: T['all']; get: T['get']; values: T['values']; execute: T['execute'] }\n> {\n\tstatic readonly [entityKind]: string = 'LibSQLPreparedQuery';\n\n\tconstructor(\n\t\tprivate client: Client,\n\t\tquery: Query,\n\t\tprivate logger: Logger,\n\t\t/** @internal */ public fields: SelectedFieldsOrdered | undefined,\n\t\tprivate tx: Transaction | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tprivate _isResponseInArrayMode: boolean,\n\t\t/** @internal */ public customResultMapper?: (\n\t\t\trows: unknown[][],\n\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t) => unknown,\n\t) {\n\t\tsuper('async', executeMethod, query);\n\t\tthis.customResultMapper = customResultMapper;\n\t\tthis.fields = fields;\n\t}\n\n\trun(placeholderValues?: Record<string, unknown>): Promise<ResultSet> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\tconst stmt: InStatement = { sql: this.query.sql, args: params as InArgs };\n\t\treturn this.tx ? this.tx.execute(stmt) : this.client.execute(stmt);\n\t}\n\n\tasync all(placeholderValues?: Record<string, unknown>): Promise<T['all']> {\n\t\tconst { fields, logger, query, tx, client, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\tconst stmt: InStatement = { sql: query.sql, args: params as InArgs };\n\t\t\treturn (tx ? tx.execute(stmt) : client.execute(stmt)).then(({ rows }) => this.mapAllResult(rows));\n\t\t}\n\n\t\tconst rows = await this.values(placeholderValues) as unknown[][];\n\n\t\treturn this.mapAllResult(rows);\n\t}\n\n\toverride mapAllResult(rows: unknown, isFromBatch?: boolean): unknown {\n\t\tif (isFromBatch) {\n\t\t\trows = (rows as ResultSet).rows;\n\t\t}\n\n\t\tif (!this.fields && !this.customResultMapper) {\n\t\t\treturn (rows as unknown[]).map((row) => normalizeRow(row));\n\t\t}\n\n\t\tif (this.customResultMapper) {\n\t\t\treturn this.customResultMapper(rows as unknown[][], normalizeFieldValue) as T['all'];\n\t\t}\n\n\t\treturn (rows as unknown[]).map((row) => {\n\t\t\treturn mapResultRow(\n\t\t\t\tthis.fields!,\n\t\t\t\tArray.prototype.slice.call(row).map((v) => normalizeFieldValue(v)),\n\t\t\t\tthis.joinsNotNullableMap,\n\t\t\t);\n\t\t});\n\t}\n\n\tasync get(placeholderValues?: Record<string, unknown>): Promise<T['get']> {\n\t\tconst { fields, logger, query, tx, client, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\tconst stmt: InStatement = { sql: query.sql, args: params as InArgs };\n\t\t\treturn (tx ? tx.execute(stmt) : client.execute(stmt)).then(({ rows }) => this.mapGetResult(rows));\n\t\t}\n\n\t\tconst rows = await this.values(placeholderValues) as unknown[][];\n\n\t\treturn this.mapGetResult(rows);\n\t}\n\n\toverride mapGetResult(rows: unknown, isFromBatch?: boolean): unknown {\n\t\tif (isFromBatch) {\n\t\t\trows = (rows as ResultSet).rows;\n\t\t}\n\n\t\tconst row = (rows as unknown[])[0];\n\n\t\tif (!this.fields && !this.customResultMapper) {\n\t\t\treturn normalizeRow(row);\n\t\t}\n\n\t\tif (!row) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (this.customResultMapper) {\n\t\t\treturn this.customResultMapper(rows as unknown[][], normalizeFieldValue) as T['get'];\n\t\t}\n\n\t\treturn mapResultRow(\n\t\t\tthis.fields!,\n\t\t\tArray.prototype.slice.call(row).map((v) => normalizeFieldValue(v)),\n\t\t\tthis.joinsNotNullableMap,\n\t\t);\n\t}\n\n\tvalues(placeholderValues?: Record<string, unknown>): Promise<T['values']> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\tconst stmt: InStatement = { sql: this.query.sql, args: params as InArgs };\n\t\treturn (this.tx ? this.tx.execute(stmt) : this.client.execute(stmt)).then(({ rows }) => rows) as Promise<\n\t\t\tT['values']\n\t\t>;\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode(): boolean {\n\t\treturn this._isResponseInArrayMode;\n\t}\n}\n\nfunction normalizeRow(obj: any) {\n\t// The libSQL node-sqlite3 compatibility wrapper returns rows\n\t// that can be accessed both as objects and arrays. Let's\n\t// turn them into objects what's what other SQLite drivers\n\t// do.\n\treturn Object.keys(obj).reduce((acc: Record<string, any>, key) => {\n\t\tif (Object.prototype.propertyIsEnumerable.call(obj, key)) {\n\t\t\tacc[key] = obj[key];\n\t\t}\n\t\treturn acc;\n\t}, {});\n}\n\nfunction normalizeFieldValue(value: unknown) {\n\tif (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) { // eslint-disable-line no-instanceof/no-instanceof\n\t\tif (typeof Buffer !== 'undefined') {\n\t\t\tif (!(value instanceof Buffer)) { // eslint-disable-line no-instanceof/no-instanceof\n\t\t\t\treturn Buffer.from(value);\n\t\t\t}\n\t\t\treturn value;\n\t\t}\n\t\tif (typeof TextDecoder !== 'undefined') {\n\t\t\treturn new TextDecoder().decode(value);\n\t\t}\n\t\tthrow new Error('TextDecoder is not available. Please provide either Buffer or TextDecoder polyfill.');\n\t}\n\treturn value;\n}\n"],"mappings":"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","names":["rows"]}
|
|
1
|
+
{"version":3,"sources":["../../src/libsql/session.ts"],"sourcesContent":["import type { Client, InArgs, InStatement, ResultSet, Transaction } from '@libsql/client';\nimport type { BatchItem as BatchItem } from '~/batch.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport type { PreparedQuery } from '~/session.ts';\nimport { fillPlaceholders, type Query, sql } from '~/sql/sql.ts';\nimport type { SQLiteAsyncDialect } from '~/sqlite-core/dialect.ts';\nimport { SQLiteTransaction } from '~/sqlite-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/sqlite-core/query-builders/select.types.ts';\nimport type {\n\tPreparedQueryConfig as PreparedQueryConfigBase,\n\tSQLiteExecuteMethod,\n\tSQLiteTransactionConfig,\n} from '~/sqlite-core/session.ts';\nimport { SQLitePreparedQuery, SQLiteSession } from '~/sqlite-core/session.ts';\nimport { mapResultRow } from '~/utils.ts';\n\nexport interface LibSQLSessionOptions {\n\tlogger?: Logger;\n}\n\ntype PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\n\nexport class LibSQLSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteSession<'async', ResultSet, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'LibSQLSession';\n\n\tprivate logger: Logger;\n\n\tconstructor(\n\t\tprivate client: Client,\n\t\tdialect: SQLiteAsyncDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: LibSQLSessionOptions,\n\t\tprivate tx: Transaction | undefined,\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t}\n\n\tprepareQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => unknown,\n\t): LibSQLPreparedQuery<T> {\n\t\treturn new LibSQLPreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\tthis.tx,\n\t\t\texecuteMethod,\n\t\t\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t);\n\t}\n\n\tasync batch<T extends BatchItem<'sqlite'>[] | readonly BatchItem<'sqlite'>[]>(queries: T) {\n\t\tconst preparedQueries: PreparedQuery[] = [];\n\t\tconst builtQueries: InStatement[] = [];\n\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({ sql: builtQuery.sql, args: builtQuery.params as InArgs });\n\t\t}\n\n\t\tconst batchResults = await this.client.batch(builtQueries);\n\t\treturn batchResults.map((result, i) => preparedQueries[i]!.mapResult(result, true));\n\t}\n\n\tasync migrate<T extends BatchItem<'sqlite'>[] | readonly BatchItem<'sqlite'>[]>(queries: T) {\n\t\tconst preparedQueries: PreparedQuery[] = [];\n\t\tconst builtQueries: InStatement[] = [];\n\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({ sql: builtQuery.sql, args: builtQuery.params as InArgs });\n\t\t}\n\n\t\tconst batchResults = await this.client.migrate(builtQueries);\n\t\treturn batchResults.map((result, i) => preparedQueries[i]!.mapResult(result, true));\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (db: LibSQLTransaction<TFullSchema, TSchema>) => T | Promise<T>,\n\t\t_config?: SQLiteTransactionConfig,\n\t): Promise<T> {\n\t\t// TODO: support transaction behavior\n\t\tconst libsqlTx = await this.client.transaction();\n\t\tconst session = new LibSQLSession<TFullSchema, TSchema>(\n\t\t\tthis.client,\n\t\t\tthis.dialect,\n\t\t\tthis.schema,\n\t\t\tthis.options,\n\t\t\tlibsqlTx,\n\t\t);\n\t\tconst tx = new LibSQLTransaction<TFullSchema, TSchema>('async', this.dialect, session, this.schema);\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait libsqlTx.commit();\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait libsqlTx.rollback();\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\toverride extractRawAllValueFromBatchResult(result: unknown): unknown {\n\t\treturn (result as ResultSet).rows;\n\t}\n\n\toverride extractRawGetValueFromBatchResult(result: unknown): unknown {\n\t\treturn (result as ResultSet).rows[0];\n\t}\n\n\toverride extractRawValuesValueFromBatchResult(result: unknown): unknown {\n\t\treturn (result as ResultSet).rows;\n\t}\n}\n\nexport class LibSQLTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteTransaction<'async', ResultSet, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'LibSQLTransaction';\n\n\toverride async transaction<T>(transaction: (tx: LibSQLTransaction<TFullSchema, TSchema>) => Promise<T>): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex}`;\n\t\tconst tx = new LibSQLTransaction('async', this.dialect, this.session, this.schema, this.nestedIndex + 1);\n\t\tawait this.session.run(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait this.session.run(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait this.session.run(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport class LibSQLPreparedQuery<T extends PreparedQueryConfig = PreparedQueryConfig> extends SQLitePreparedQuery<\n\t{ type: 'async'; run: ResultSet; all: T['all']; get: T['get']; values: T['values']; execute: T['execute'] }\n> {\n\tstatic override readonly [entityKind]: string = 'LibSQLPreparedQuery';\n\n\tconstructor(\n\t\tprivate client: Client,\n\t\tquery: Query,\n\t\tprivate logger: Logger,\n\t\t/** @internal */ public fields: SelectedFieldsOrdered | undefined,\n\t\tprivate tx: Transaction | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tprivate _isResponseInArrayMode: boolean,\n\t\t/** @internal */ public customResultMapper?: (\n\t\t\trows: unknown[][],\n\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t) => unknown,\n\t) {\n\t\tsuper('async', executeMethod, query);\n\t\tthis.customResultMapper = customResultMapper;\n\t\tthis.fields = fields;\n\t}\n\n\trun(placeholderValues?: Record<string, unknown>): Promise<ResultSet> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\tconst stmt: InStatement = { sql: this.query.sql, args: params as InArgs };\n\t\treturn this.tx ? this.tx.execute(stmt) : this.client.execute(stmt);\n\t}\n\n\tasync all(placeholderValues?: Record<string, unknown>): Promise<T['all']> {\n\t\tconst { fields, logger, query, tx, client, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\tconst stmt: InStatement = { sql: query.sql, args: params as InArgs };\n\t\t\treturn (tx ? tx.execute(stmt) : client.execute(stmt)).then(({ rows }) => this.mapAllResult(rows));\n\t\t}\n\n\t\tconst rows = await this.values(placeholderValues) as unknown[][];\n\n\t\treturn this.mapAllResult(rows);\n\t}\n\n\toverride mapAllResult(rows: unknown, isFromBatch?: boolean): unknown {\n\t\tif (isFromBatch) {\n\t\t\trows = (rows as ResultSet).rows;\n\t\t}\n\n\t\tif (!this.fields && !this.customResultMapper) {\n\t\t\treturn (rows as unknown[]).map((row) => normalizeRow(row));\n\t\t}\n\n\t\tif (this.customResultMapper) {\n\t\t\treturn this.customResultMapper(rows as unknown[][], normalizeFieldValue) as T['all'];\n\t\t}\n\n\t\treturn (rows as unknown[]).map((row) => {\n\t\t\treturn mapResultRow(\n\t\t\t\tthis.fields!,\n\t\t\t\tArray.prototype.slice.call(row).map((v) => normalizeFieldValue(v)),\n\t\t\t\tthis.joinsNotNullableMap,\n\t\t\t);\n\t\t});\n\t}\n\n\tasync get(placeholderValues?: Record<string, unknown>): Promise<T['get']> {\n\t\tconst { fields, logger, query, tx, client, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\tconst stmt: InStatement = { sql: query.sql, args: params as InArgs };\n\t\t\treturn (tx ? tx.execute(stmt) : client.execute(stmt)).then(({ rows }) => this.mapGetResult(rows));\n\t\t}\n\n\t\tconst rows = await this.values(placeholderValues) as unknown[][];\n\n\t\treturn this.mapGetResult(rows);\n\t}\n\n\toverride mapGetResult(rows: unknown, isFromBatch?: boolean): unknown {\n\t\tif (isFromBatch) {\n\t\t\trows = (rows as ResultSet).rows;\n\t\t}\n\n\t\tconst row = (rows as unknown[])[0];\n\n\t\tif (!this.fields && !this.customResultMapper) {\n\t\t\treturn normalizeRow(row);\n\t\t}\n\n\t\tif (!row) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (this.customResultMapper) {\n\t\t\treturn this.customResultMapper(rows as unknown[][], normalizeFieldValue) as T['get'];\n\t\t}\n\n\t\treturn mapResultRow(\n\t\t\tthis.fields!,\n\t\t\tArray.prototype.slice.call(row).map((v) => normalizeFieldValue(v)),\n\t\t\tthis.joinsNotNullableMap,\n\t\t);\n\t}\n\n\tvalues(placeholderValues?: Record<string, unknown>): Promise<T['values']> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\tconst stmt: InStatement = { sql: this.query.sql, args: params as InArgs };\n\t\treturn (this.tx ? this.tx.execute(stmt) : this.client.execute(stmt)).then(({ rows }) => rows) as Promise<\n\t\t\tT['values']\n\t\t>;\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode(): boolean {\n\t\treturn this._isResponseInArrayMode;\n\t}\n}\n\nfunction normalizeRow(obj: any) {\n\t// The libSQL node-sqlite3 compatibility wrapper returns rows\n\t// that can be accessed both as objects and arrays. Let's\n\t// turn them into objects what's what other SQLite drivers\n\t// do.\n\treturn Object.keys(obj).reduce((acc: Record<string, any>, key) => {\n\t\tif (Object.prototype.propertyIsEnumerable.call(obj, key)) {\n\t\t\tacc[key] = obj[key];\n\t\t}\n\t\treturn acc;\n\t}, {});\n}\n\nfunction normalizeFieldValue(value: unknown) {\n\tif (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) { // eslint-disable-line no-instanceof/no-instanceof\n\t\tif (typeof Buffer !== 'undefined') {\n\t\t\tif (!(value instanceof Buffer)) { // eslint-disable-line no-instanceof/no-instanceof\n\t\t\t\treturn Buffer.from(value);\n\t\t\t}\n\t\t\treturn value;\n\t\t}\n\t\tif (typeof TextDecoder !== 'undefined') {\n\t\t\treturn new TextDecoder().decode(value);\n\t\t}\n\t\tthrow new Error('TextDecoder is not available. Please provide either Buffer or TextDecoder polyfill.');\n\t}\n\treturn value;\n}\n"],"mappings":"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","names":["rows"]}
|
package/libsql/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/libsql/session.ts"],"sourcesContent":["import type { Client, InArgs, InStatement, ResultSet, Transaction } from '@libsql/client';\nimport type { BatchItem as BatchItem } from '~/batch.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport type { PreparedQuery } from '~/session.ts';\nimport { fillPlaceholders, type Query, sql } from '~/sql/sql.ts';\nimport type { SQLiteAsyncDialect } from '~/sqlite-core/dialect.ts';\nimport { SQLiteTransaction } from '~/sqlite-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/sqlite-core/query-builders/select.types.ts';\nimport type {\n\tPreparedQueryConfig as PreparedQueryConfigBase,\n\tSQLiteExecuteMethod,\n\tSQLiteTransactionConfig,\n} from '~/sqlite-core/session.ts';\nimport { SQLitePreparedQuery, SQLiteSession } from '~/sqlite-core/session.ts';\nimport { mapResultRow } from '~/utils.ts';\n\nexport interface LibSQLSessionOptions {\n\tlogger?: Logger;\n}\n\ntype PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\n\nexport class LibSQLSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteSession<'async', ResultSet, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'LibSQLSession';\n\n\tprivate logger: Logger;\n\n\tconstructor(\n\t\tprivate client: Client,\n\t\tdialect: SQLiteAsyncDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: LibSQLSessionOptions,\n\t\tprivate tx: Transaction | undefined,\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t}\n\n\tprepareQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => unknown,\n\t): LibSQLPreparedQuery<T> {\n\t\treturn new LibSQLPreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\tthis.tx,\n\t\t\texecuteMethod,\n\t\t\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t);\n\t}\n\n\tasync batch<T extends BatchItem<'sqlite'>[] | readonly BatchItem<'sqlite'>[]>(queries: T) {\n\t\tconst preparedQueries: PreparedQuery[] = [];\n\t\tconst builtQueries: InStatement[] = [];\n\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({ sql: builtQuery.sql, args: builtQuery.params as InArgs });\n\t\t}\n\n\t\tconst batchResults = await this.client.batch(builtQueries);\n\t\treturn batchResults.map((result, i) => preparedQueries[i]!.mapResult(result, true));\n\t}\n\n\tasync migrate<T extends BatchItem<'sqlite'>[] | readonly BatchItem<'sqlite'>[]>(queries: T) {\n\t\tconst preparedQueries: PreparedQuery[] = [];\n\t\tconst builtQueries: InStatement[] = [];\n\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({ sql: builtQuery.sql, args: builtQuery.params as InArgs });\n\t\t}\n\n\t\tconst batchResults = await this.client.migrate(builtQueries);\n\t\treturn batchResults.map((result, i) => preparedQueries[i]!.mapResult(result, true));\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (db: LibSQLTransaction<TFullSchema, TSchema>) => T | Promise<T>,\n\t\t_config?: SQLiteTransactionConfig,\n\t): Promise<T> {\n\t\t// TODO: support transaction behavior\n\t\tconst libsqlTx = await this.client.transaction();\n\t\tconst session = new LibSQLSession<TFullSchema, TSchema>(\n\t\t\tthis.client,\n\t\t\tthis.dialect,\n\t\t\tthis.schema,\n\t\t\tthis.options,\n\t\t\tlibsqlTx,\n\t\t);\n\t\tconst tx = new LibSQLTransaction<TFullSchema, TSchema>('async', this.dialect, session, this.schema);\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait libsqlTx.commit();\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait libsqlTx.rollback();\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\toverride extractRawAllValueFromBatchResult(result: unknown): unknown {\n\t\treturn (result as ResultSet).rows;\n\t}\n\n\toverride extractRawGetValueFromBatchResult(result: unknown): unknown {\n\t\treturn (result as ResultSet).rows[0];\n\t}\n\n\toverride extractRawValuesValueFromBatchResult(result: unknown): unknown {\n\t\treturn (result as ResultSet).rows;\n\t}\n}\n\nexport class LibSQLTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteTransaction<'async', ResultSet, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'LibSQLTransaction';\n\n\toverride async transaction<T>(transaction: (tx: LibSQLTransaction<TFullSchema, TSchema>) => Promise<T>): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex}`;\n\t\tconst tx = new LibSQLTransaction('async', this.dialect, this.session, this.schema, this.nestedIndex + 1);\n\t\tawait this.session.run(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait this.session.run(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait this.session.run(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport class LibSQLPreparedQuery<T extends PreparedQueryConfig = PreparedQueryConfig> extends SQLitePreparedQuery<\n\t{ type: 'async'; run: ResultSet; all: T['all']; get: T['get']; values: T['values']; execute: T['execute'] }\n> {\n\tstatic readonly [entityKind]: string = 'LibSQLPreparedQuery';\n\n\tconstructor(\n\t\tprivate client: Client,\n\t\tquery: Query,\n\t\tprivate logger: Logger,\n\t\t/** @internal */ public fields: SelectedFieldsOrdered | undefined,\n\t\tprivate tx: Transaction | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tprivate _isResponseInArrayMode: boolean,\n\t\t/** @internal */ public customResultMapper?: (\n\t\t\trows: unknown[][],\n\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t) => unknown,\n\t) {\n\t\tsuper('async', executeMethod, query);\n\t\tthis.customResultMapper = customResultMapper;\n\t\tthis.fields = fields;\n\t}\n\n\trun(placeholderValues?: Record<string, unknown>): Promise<ResultSet> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\tconst stmt: InStatement = { sql: this.query.sql, args: params as InArgs };\n\t\treturn this.tx ? this.tx.execute(stmt) : this.client.execute(stmt);\n\t}\n\n\tasync all(placeholderValues?: Record<string, unknown>): Promise<T['all']> {\n\t\tconst { fields, logger, query, tx, client, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\tconst stmt: InStatement = { sql: query.sql, args: params as InArgs };\n\t\t\treturn (tx ? tx.execute(stmt) : client.execute(stmt)).then(({ rows }) => this.mapAllResult(rows));\n\t\t}\n\n\t\tconst rows = await this.values(placeholderValues) as unknown[][];\n\n\t\treturn this.mapAllResult(rows);\n\t}\n\n\toverride mapAllResult(rows: unknown, isFromBatch?: boolean): unknown {\n\t\tif (isFromBatch) {\n\t\t\trows = (rows as ResultSet).rows;\n\t\t}\n\n\t\tif (!this.fields && !this.customResultMapper) {\n\t\t\treturn (rows as unknown[]).map((row) => normalizeRow(row));\n\t\t}\n\n\t\tif (this.customResultMapper) {\n\t\t\treturn this.customResultMapper(rows as unknown[][], normalizeFieldValue) as T['all'];\n\t\t}\n\n\t\treturn (rows as unknown[]).map((row) => {\n\t\t\treturn mapResultRow(\n\t\t\t\tthis.fields!,\n\t\t\t\tArray.prototype.slice.call(row).map((v) => normalizeFieldValue(v)),\n\t\t\t\tthis.joinsNotNullableMap,\n\t\t\t);\n\t\t});\n\t}\n\n\tasync get(placeholderValues?: Record<string, unknown>): Promise<T['get']> {\n\t\tconst { fields, logger, query, tx, client, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\tconst stmt: InStatement = { sql: query.sql, args: params as InArgs };\n\t\t\treturn (tx ? tx.execute(stmt) : client.execute(stmt)).then(({ rows }) => this.mapGetResult(rows));\n\t\t}\n\n\t\tconst rows = await this.values(placeholderValues) as unknown[][];\n\n\t\treturn this.mapGetResult(rows);\n\t}\n\n\toverride mapGetResult(rows: unknown, isFromBatch?: boolean): unknown {\n\t\tif (isFromBatch) {\n\t\t\trows = (rows as ResultSet).rows;\n\t\t}\n\n\t\tconst row = (rows as unknown[])[0];\n\n\t\tif (!this.fields && !this.customResultMapper) {\n\t\t\treturn normalizeRow(row);\n\t\t}\n\n\t\tif (!row) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (this.customResultMapper) {\n\t\t\treturn this.customResultMapper(rows as unknown[][], normalizeFieldValue) as T['get'];\n\t\t}\n\n\t\treturn mapResultRow(\n\t\t\tthis.fields!,\n\t\t\tArray.prototype.slice.call(row).map((v) => normalizeFieldValue(v)),\n\t\t\tthis.joinsNotNullableMap,\n\t\t);\n\t}\n\n\tvalues(placeholderValues?: Record<string, unknown>): Promise<T['values']> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\tconst stmt: InStatement = { sql: this.query.sql, args: params as InArgs };\n\t\treturn (this.tx ? this.tx.execute(stmt) : this.client.execute(stmt)).then(({ rows }) => rows) as Promise<\n\t\t\tT['values']\n\t\t>;\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode(): boolean {\n\t\treturn this._isResponseInArrayMode;\n\t}\n}\n\nfunction normalizeRow(obj: any) {\n\t// The libSQL node-sqlite3 compatibility wrapper returns rows\n\t// that can be accessed both as objects and arrays. Let's\n\t// turn them into objects what's what other SQLite drivers\n\t// do.\n\treturn Object.keys(obj).reduce((acc: Record<string, any>, key) => {\n\t\tif (Object.prototype.propertyIsEnumerable.call(obj, key)) {\n\t\t\tacc[key] = obj[key];\n\t\t}\n\t\treturn acc;\n\t}, {});\n}\n\nfunction normalizeFieldValue(value: unknown) {\n\tif (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) { // eslint-disable-line no-instanceof/no-instanceof\n\t\tif (typeof Buffer !== 'undefined') {\n\t\t\tif (!(value instanceof Buffer)) { // eslint-disable-line no-instanceof/no-instanceof\n\t\t\t\treturn Buffer.from(value);\n\t\t\t}\n\t\t\treturn value;\n\t\t}\n\t\tif (typeof TextDecoder !== 'undefined') {\n\t\t\treturn new TextDecoder().decode(value);\n\t\t}\n\t\tthrow new Error('TextDecoder is not available. Please provide either Buffer or TextDecoder polyfill.');\n\t}\n\treturn value;\n}\n"],"mappings":"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","names":["rows"]}
|
|
1
|
+
{"version":3,"sources":["../../src/libsql/session.ts"],"sourcesContent":["import type { Client, InArgs, InStatement, ResultSet, Transaction } from '@libsql/client';\nimport type { BatchItem as BatchItem } from '~/batch.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport type { PreparedQuery } from '~/session.ts';\nimport { fillPlaceholders, type Query, sql } from '~/sql/sql.ts';\nimport type { SQLiteAsyncDialect } from '~/sqlite-core/dialect.ts';\nimport { SQLiteTransaction } from '~/sqlite-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/sqlite-core/query-builders/select.types.ts';\nimport type {\n\tPreparedQueryConfig as PreparedQueryConfigBase,\n\tSQLiteExecuteMethod,\n\tSQLiteTransactionConfig,\n} from '~/sqlite-core/session.ts';\nimport { SQLitePreparedQuery, SQLiteSession } from '~/sqlite-core/session.ts';\nimport { mapResultRow } from '~/utils.ts';\n\nexport interface LibSQLSessionOptions {\n\tlogger?: Logger;\n}\n\ntype PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\n\nexport class LibSQLSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteSession<'async', ResultSet, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'LibSQLSession';\n\n\tprivate logger: Logger;\n\n\tconstructor(\n\t\tprivate client: Client,\n\t\tdialect: SQLiteAsyncDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: LibSQLSessionOptions,\n\t\tprivate tx: Transaction | undefined,\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t}\n\n\tprepareQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => unknown,\n\t): LibSQLPreparedQuery<T> {\n\t\treturn new LibSQLPreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\tthis.tx,\n\t\t\texecuteMethod,\n\t\t\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t);\n\t}\n\n\tasync batch<T extends BatchItem<'sqlite'>[] | readonly BatchItem<'sqlite'>[]>(queries: T) {\n\t\tconst preparedQueries: PreparedQuery[] = [];\n\t\tconst builtQueries: InStatement[] = [];\n\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({ sql: builtQuery.sql, args: builtQuery.params as InArgs });\n\t\t}\n\n\t\tconst batchResults = await this.client.batch(builtQueries);\n\t\treturn batchResults.map((result, i) => preparedQueries[i]!.mapResult(result, true));\n\t}\n\n\tasync migrate<T extends BatchItem<'sqlite'>[] | readonly BatchItem<'sqlite'>[]>(queries: T) {\n\t\tconst preparedQueries: PreparedQuery[] = [];\n\t\tconst builtQueries: InStatement[] = [];\n\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({ sql: builtQuery.sql, args: builtQuery.params as InArgs });\n\t\t}\n\n\t\tconst batchResults = await this.client.migrate(builtQueries);\n\t\treturn batchResults.map((result, i) => preparedQueries[i]!.mapResult(result, true));\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (db: LibSQLTransaction<TFullSchema, TSchema>) => T | Promise<T>,\n\t\t_config?: SQLiteTransactionConfig,\n\t): Promise<T> {\n\t\t// TODO: support transaction behavior\n\t\tconst libsqlTx = await this.client.transaction();\n\t\tconst session = new LibSQLSession<TFullSchema, TSchema>(\n\t\t\tthis.client,\n\t\t\tthis.dialect,\n\t\t\tthis.schema,\n\t\t\tthis.options,\n\t\t\tlibsqlTx,\n\t\t);\n\t\tconst tx = new LibSQLTransaction<TFullSchema, TSchema>('async', this.dialect, session, this.schema);\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait libsqlTx.commit();\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait libsqlTx.rollback();\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\toverride extractRawAllValueFromBatchResult(result: unknown): unknown {\n\t\treturn (result as ResultSet).rows;\n\t}\n\n\toverride extractRawGetValueFromBatchResult(result: unknown): unknown {\n\t\treturn (result as ResultSet).rows[0];\n\t}\n\n\toverride extractRawValuesValueFromBatchResult(result: unknown): unknown {\n\t\treturn (result as ResultSet).rows;\n\t}\n}\n\nexport class LibSQLTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteTransaction<'async', ResultSet, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'LibSQLTransaction';\n\n\toverride async transaction<T>(transaction: (tx: LibSQLTransaction<TFullSchema, TSchema>) => Promise<T>): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex}`;\n\t\tconst tx = new LibSQLTransaction('async', this.dialect, this.session, this.schema, this.nestedIndex + 1);\n\t\tawait this.session.run(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait this.session.run(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait this.session.run(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport class LibSQLPreparedQuery<T extends PreparedQueryConfig = PreparedQueryConfig> extends SQLitePreparedQuery<\n\t{ type: 'async'; run: ResultSet; all: T['all']; get: T['get']; values: T['values']; execute: T['execute'] }\n> {\n\tstatic override readonly [entityKind]: string = 'LibSQLPreparedQuery';\n\n\tconstructor(\n\t\tprivate client: Client,\n\t\tquery: Query,\n\t\tprivate logger: Logger,\n\t\t/** @internal */ public fields: SelectedFieldsOrdered | undefined,\n\t\tprivate tx: Transaction | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tprivate _isResponseInArrayMode: boolean,\n\t\t/** @internal */ public customResultMapper?: (\n\t\t\trows: unknown[][],\n\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t) => unknown,\n\t) {\n\t\tsuper('async', executeMethod, query);\n\t\tthis.customResultMapper = customResultMapper;\n\t\tthis.fields = fields;\n\t}\n\n\trun(placeholderValues?: Record<string, unknown>): Promise<ResultSet> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\tconst stmt: InStatement = { sql: this.query.sql, args: params as InArgs };\n\t\treturn this.tx ? this.tx.execute(stmt) : this.client.execute(stmt);\n\t}\n\n\tasync all(placeholderValues?: Record<string, unknown>): Promise<T['all']> {\n\t\tconst { fields, logger, query, tx, client, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\tconst stmt: InStatement = { sql: query.sql, args: params as InArgs };\n\t\t\treturn (tx ? tx.execute(stmt) : client.execute(stmt)).then(({ rows }) => this.mapAllResult(rows));\n\t\t}\n\n\t\tconst rows = await this.values(placeholderValues) as unknown[][];\n\n\t\treturn this.mapAllResult(rows);\n\t}\n\n\toverride mapAllResult(rows: unknown, isFromBatch?: boolean): unknown {\n\t\tif (isFromBatch) {\n\t\t\trows = (rows as ResultSet).rows;\n\t\t}\n\n\t\tif (!this.fields && !this.customResultMapper) {\n\t\t\treturn (rows as unknown[]).map((row) => normalizeRow(row));\n\t\t}\n\n\t\tif (this.customResultMapper) {\n\t\t\treturn this.customResultMapper(rows as unknown[][], normalizeFieldValue) as T['all'];\n\t\t}\n\n\t\treturn (rows as unknown[]).map((row) => {\n\t\t\treturn mapResultRow(\n\t\t\t\tthis.fields!,\n\t\t\t\tArray.prototype.slice.call(row).map((v) => normalizeFieldValue(v)),\n\t\t\t\tthis.joinsNotNullableMap,\n\t\t\t);\n\t\t});\n\t}\n\n\tasync get(placeholderValues?: Record<string, unknown>): Promise<T['get']> {\n\t\tconst { fields, logger, query, tx, client, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\tconst stmt: InStatement = { sql: query.sql, args: params as InArgs };\n\t\t\treturn (tx ? tx.execute(stmt) : client.execute(stmt)).then(({ rows }) => this.mapGetResult(rows));\n\t\t}\n\n\t\tconst rows = await this.values(placeholderValues) as unknown[][];\n\n\t\treturn this.mapGetResult(rows);\n\t}\n\n\toverride mapGetResult(rows: unknown, isFromBatch?: boolean): unknown {\n\t\tif (isFromBatch) {\n\t\t\trows = (rows as ResultSet).rows;\n\t\t}\n\n\t\tconst row = (rows as unknown[])[0];\n\n\t\tif (!this.fields && !this.customResultMapper) {\n\t\t\treturn normalizeRow(row);\n\t\t}\n\n\t\tif (!row) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (this.customResultMapper) {\n\t\t\treturn this.customResultMapper(rows as unknown[][], normalizeFieldValue) as T['get'];\n\t\t}\n\n\t\treturn mapResultRow(\n\t\t\tthis.fields!,\n\t\t\tArray.prototype.slice.call(row).map((v) => normalizeFieldValue(v)),\n\t\t\tthis.joinsNotNullableMap,\n\t\t);\n\t}\n\n\tvalues(placeholderValues?: Record<string, unknown>): Promise<T['values']> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\tconst stmt: InStatement = { sql: this.query.sql, args: params as InArgs };\n\t\treturn (this.tx ? this.tx.execute(stmt) : this.client.execute(stmt)).then(({ rows }) => rows) as Promise<\n\t\t\tT['values']\n\t\t>;\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode(): boolean {\n\t\treturn this._isResponseInArrayMode;\n\t}\n}\n\nfunction normalizeRow(obj: any) {\n\t// The libSQL node-sqlite3 compatibility wrapper returns rows\n\t// that can be accessed both as objects and arrays. Let's\n\t// turn them into objects what's what other SQLite drivers\n\t// do.\n\treturn Object.keys(obj).reduce((acc: Record<string, any>, key) => {\n\t\tif (Object.prototype.propertyIsEnumerable.call(obj, key)) {\n\t\t\tacc[key] = obj[key];\n\t\t}\n\t\treturn acc;\n\t}, {});\n}\n\nfunction normalizeFieldValue(value: unknown) {\n\tif (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) { // eslint-disable-line no-instanceof/no-instanceof\n\t\tif (typeof Buffer !== 'undefined') {\n\t\t\tif (!(value instanceof Buffer)) { // eslint-disable-line no-instanceof/no-instanceof\n\t\t\t\treturn Buffer.from(value);\n\t\t\t}\n\t\t\treturn value;\n\t\t}\n\t\tif (typeof TextDecoder !== 'undefined') {\n\t\t\treturn new TextDecoder().decode(value);\n\t\t}\n\t\tthrow new Error('TextDecoder is not available. Please provide either Buffer or TextDecoder polyfill.');\n\t}\n\treturn value;\n}\n"],"mappings":"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","names":["rows"]}
|
package/monodriver.d.cts
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
/// <reference types="bun-types" />
|
|
2
|
-
/// <reference types="node" />
|
|
3
1
|
import type { RDSDataClient, RDSDataClientConfig as RDSConfig } from '@aws-sdk/client-rds-data';
|
|
4
2
|
import type { PGlite, PGliteOptions } from '@electric-sql/pglite';
|
|
5
3
|
import type { Client as LibsqlClient, Config as LibsqlConfig } from '@libsql/client';
|
package/monodriver.d.ts
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
/// <reference types="bun-types" />
|
|
2
|
-
/// <reference types="node" />
|
|
3
1
|
import type { RDSDataClient, RDSDataClientConfig as RDSConfig } from '@aws-sdk/client-rds-data';
|
|
4
2
|
import type { PGlite, PGliteOptions } from '@electric-sql/pglite';
|
|
5
3
|
import type { Client as LibsqlClient, Config as LibsqlConfig } from '@libsql/client';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/mysql-core/columns/bigint.ts"],"sourcesContent":["import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnyMySqlTable } from '~/mysql-core/table.ts';\nimport { getColumnNameAndConfig } from '~/utils.ts';\nimport { MySqlColumnBuilderWithAutoIncrement, MySqlColumnWithAutoIncrement } from './common.ts';\n\nexport type MySqlBigInt53BuilderInitial<TName extends string> = MySqlBigInt53Builder<{\n\tname: TName;\n\tdataType: 'number';\n\tcolumnType: 'MySqlBigInt53';\n\tdata: number;\n\tdriverParam: number | string;\n\tenumValues: undefined;\n\tgenerated: undefined;\n}>;\n\nexport class MySqlBigInt53Builder<T extends ColumnBuilderBaseConfig<'number', 'MySqlBigInt53'>>\n\textends MySqlColumnBuilderWithAutoIncrement<T, { unsigned: boolean }>\n{\n\tstatic readonly [entityKind]: string = 'MySqlBigInt53Builder';\n\n\tconstructor(name: T['name'], unsigned: boolean = false) {\n\t\tsuper(name, 'number', 'MySqlBigInt53');\n\t\tthis.config.unsigned = unsigned;\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyMySqlTable<{ name: TTableName }>,\n\t): MySqlBigInt53<MakeColumnConfig<T, TTableName>> {\n\t\treturn new MySqlBigInt53<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class MySqlBigInt53<T extends ColumnBaseConfig<'number', 'MySqlBigInt53'>>\n\textends MySqlColumnWithAutoIncrement<T, { unsigned: boolean }>\n{\n\tstatic readonly [entityKind]: string = 'MySqlBigInt53';\n\n\tgetSQLType(): string {\n\t\treturn `bigint${this.config.unsigned ? ' unsigned' : ''}`;\n\t}\n\n\toverride mapFromDriverValue(value: number | string): number {\n\t\tif (typeof value === 'number') {\n\t\t\treturn value;\n\t\t}\n\t\treturn Number(value);\n\t}\n}\n\nexport type MySqlBigInt64BuilderInitial<TName extends string> = MySqlBigInt64Builder<{\n\tname: TName;\n\tdataType: 'bigint';\n\tcolumnType: 'MySqlBigInt64';\n\tdata: bigint;\n\tdriverParam: string;\n\tenumValues: undefined;\n\tgenerated: undefined;\n}>;\n\nexport class MySqlBigInt64Builder<T extends ColumnBuilderBaseConfig<'bigint', 'MySqlBigInt64'>>\n\textends MySqlColumnBuilderWithAutoIncrement<T, { unsigned: boolean }>\n{\n\tstatic readonly [entityKind]: string = 'MySqlBigInt64Builder';\n\n\tconstructor(name: T['name'], unsigned: boolean = false) {\n\t\tsuper(name, 'bigint', 'MySqlBigInt64');\n\t\tthis.config.unsigned = unsigned;\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyMySqlTable<{ name: TTableName }>,\n\t): MySqlBigInt64<MakeColumnConfig<T, TTableName>> {\n\t\treturn new MySqlBigInt64<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class MySqlBigInt64<T extends ColumnBaseConfig<'bigint', 'MySqlBigInt64'>>\n\textends MySqlColumnWithAutoIncrement<T, { unsigned: boolean }>\n{\n\tstatic readonly [entityKind]: string = 'MySqlBigInt64';\n\n\tgetSQLType(): string {\n\t\treturn `bigint${this.config.unsigned ? ' unsigned' : ''}`;\n\t}\n\n\t// eslint-disable-next-line unicorn/prefer-native-coercion-functions\n\toverride mapFromDriverValue(value: string): bigint {\n\t\treturn BigInt(value);\n\t}\n}\n\nexport interface MySqlBigIntConfig<T extends 'number' | 'bigint' = 'number' | 'bigint'> {\n\tmode: T;\n\tunsigned?: boolean;\n}\n\nexport function bigint<TMode extends MySqlBigIntConfig['mode']>(\n\tconfig: MySqlBigIntConfig<TMode>,\n): TMode extends 'number' ? MySqlBigInt53BuilderInitial<''> : MySqlBigInt64BuilderInitial<''>;\nexport function bigint<TName extends string, TMode extends MySqlBigIntConfig['mode']>(\n\tname: TName,\n\tconfig: MySqlBigIntConfig<TMode>,\n): TMode extends 'number' ? MySqlBigInt53BuilderInitial<TName> : MySqlBigInt64BuilderInitial<TName>;\nexport function bigint(a?: string | MySqlBigIntConfig, b?: MySqlBigIntConfig) {\n\tconst { name, config } = getColumnNameAndConfig<MySqlBigIntConfig>(a, b);\n\tif (config.mode === 'number') {\n\t\treturn new MySqlBigInt53Builder(name, config.unsigned);\n\t}\n\treturn new MySqlBigInt64Builder(name, config.unsigned);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,oBAA2B;AAE3B,mBAAuC;AACvC,oBAAkF;AAY3E,MAAM,6BACJ,kDACT;AAAA,EACC,
|
|
1
|
+
{"version":3,"sources":["../../../src/mysql-core/columns/bigint.ts"],"sourcesContent":["import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnyMySqlTable } from '~/mysql-core/table.ts';\nimport { getColumnNameAndConfig } from '~/utils.ts';\nimport { MySqlColumnBuilderWithAutoIncrement, MySqlColumnWithAutoIncrement } from './common.ts';\n\nexport type MySqlBigInt53BuilderInitial<TName extends string> = MySqlBigInt53Builder<{\n\tname: TName;\n\tdataType: 'number';\n\tcolumnType: 'MySqlBigInt53';\n\tdata: number;\n\tdriverParam: number | string;\n\tenumValues: undefined;\n\tgenerated: undefined;\n}>;\n\nexport class MySqlBigInt53Builder<T extends ColumnBuilderBaseConfig<'number', 'MySqlBigInt53'>>\n\textends MySqlColumnBuilderWithAutoIncrement<T, { unsigned: boolean }>\n{\n\tstatic override readonly [entityKind]: string = 'MySqlBigInt53Builder';\n\n\tconstructor(name: T['name'], unsigned: boolean = false) {\n\t\tsuper(name, 'number', 'MySqlBigInt53');\n\t\tthis.config.unsigned = unsigned;\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyMySqlTable<{ name: TTableName }>,\n\t): MySqlBigInt53<MakeColumnConfig<T, TTableName>> {\n\t\treturn new MySqlBigInt53<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class MySqlBigInt53<T extends ColumnBaseConfig<'number', 'MySqlBigInt53'>>\n\textends MySqlColumnWithAutoIncrement<T, { unsigned: boolean }>\n{\n\tstatic override readonly [entityKind]: string = 'MySqlBigInt53';\n\n\tgetSQLType(): string {\n\t\treturn `bigint${this.config.unsigned ? ' unsigned' : ''}`;\n\t}\n\n\toverride mapFromDriverValue(value: number | string): number {\n\t\tif (typeof value === 'number') {\n\t\t\treturn value;\n\t\t}\n\t\treturn Number(value);\n\t}\n}\n\nexport type MySqlBigInt64BuilderInitial<TName extends string> = MySqlBigInt64Builder<{\n\tname: TName;\n\tdataType: 'bigint';\n\tcolumnType: 'MySqlBigInt64';\n\tdata: bigint;\n\tdriverParam: string;\n\tenumValues: undefined;\n\tgenerated: undefined;\n}>;\n\nexport class MySqlBigInt64Builder<T extends ColumnBuilderBaseConfig<'bigint', 'MySqlBigInt64'>>\n\textends MySqlColumnBuilderWithAutoIncrement<T, { unsigned: boolean }>\n{\n\tstatic override readonly [entityKind]: string = 'MySqlBigInt64Builder';\n\n\tconstructor(name: T['name'], unsigned: boolean = false) {\n\t\tsuper(name, 'bigint', 'MySqlBigInt64');\n\t\tthis.config.unsigned = unsigned;\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyMySqlTable<{ name: TTableName }>,\n\t): MySqlBigInt64<MakeColumnConfig<T, TTableName>> {\n\t\treturn new MySqlBigInt64<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class MySqlBigInt64<T extends ColumnBaseConfig<'bigint', 'MySqlBigInt64'>>\n\textends MySqlColumnWithAutoIncrement<T, { unsigned: boolean }>\n{\n\tstatic override readonly [entityKind]: string = 'MySqlBigInt64';\n\n\tgetSQLType(): string {\n\t\treturn `bigint${this.config.unsigned ? ' unsigned' : ''}`;\n\t}\n\n\t// eslint-disable-next-line unicorn/prefer-native-coercion-functions\n\toverride mapFromDriverValue(value: string): bigint {\n\t\treturn BigInt(value);\n\t}\n}\n\nexport interface MySqlBigIntConfig<T extends 'number' | 'bigint' = 'number' | 'bigint'> {\n\tmode: T;\n\tunsigned?: boolean;\n}\n\nexport function bigint<TMode extends MySqlBigIntConfig['mode']>(\n\tconfig: MySqlBigIntConfig<TMode>,\n): TMode extends 'number' ? MySqlBigInt53BuilderInitial<''> : MySqlBigInt64BuilderInitial<''>;\nexport function bigint<TName extends string, TMode extends MySqlBigIntConfig['mode']>(\n\tname: TName,\n\tconfig: MySqlBigIntConfig<TMode>,\n): TMode extends 'number' ? MySqlBigInt53BuilderInitial<TName> : MySqlBigInt64BuilderInitial<TName>;\nexport function bigint(a?: string | MySqlBigIntConfig, b?: MySqlBigIntConfig) {\n\tconst { name, config } = getColumnNameAndConfig<MySqlBigIntConfig>(a, b);\n\tif (config.mode === 'number') {\n\t\treturn new MySqlBigInt53Builder(name, config.unsigned);\n\t}\n\treturn new MySqlBigInt64Builder(name, config.unsigned);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,oBAA2B;AAE3B,mBAAuC;AACvC,oBAAkF;AAY3E,MAAM,6BACJ,kDACT;AAAA,EACC,QAA0B,wBAAU,IAAY;AAAA,EAEhD,YAAY,MAAiB,WAAoB,OAAO;AACvD,UAAM,MAAM,UAAU,eAAe;AACrC,SAAK,OAAO,WAAW;AAAA,EACxB;AAAA;AAAA,EAGS,MACR,OACiD;AACjD,WAAO,IAAI;AAAA,MACV;AAAA,MACA,KAAK;AAAA,IACN;AAAA,EACD;AACD;AAEO,MAAM,sBACJ,2CACT;AAAA,EACC,QAA0B,wBAAU,IAAY;AAAA,EAEhD,aAAqB;AACpB,WAAO,SAAS,KAAK,OAAO,WAAW,cAAc,EAAE;AAAA,EACxD;AAAA,EAES,mBAAmB,OAAgC;AAC3D,QAAI,OAAO,UAAU,UAAU;AAC9B,aAAO;AAAA,IACR;AACA,WAAO,OAAO,KAAK;AAAA,EACpB;AACD;AAYO,MAAM,6BACJ,kDACT;AAAA,EACC,QAA0B,wBAAU,IAAY;AAAA,EAEhD,YAAY,MAAiB,WAAoB,OAAO;AACvD,UAAM,MAAM,UAAU,eAAe;AACrC,SAAK,OAAO,WAAW;AAAA,EACxB;AAAA;AAAA,EAGS,MACR,OACiD;AACjD,WAAO,IAAI;AAAA,MACV;AAAA,MACA,KAAK;AAAA,IACN;AAAA,EACD;AACD;AAEO,MAAM,sBACJ,2CACT;AAAA,EACC,QAA0B,wBAAU,IAAY;AAAA,EAEhD,aAAqB;AACpB,WAAO,SAAS,KAAK,OAAO,WAAW,cAAc,EAAE;AAAA,EACxD;AAAA;AAAA,EAGS,mBAAmB,OAAuB;AAClD,WAAO,OAAO,KAAK;AAAA,EACpB;AACD;AAcO,SAAS,OAAO,GAAgC,GAAuB;AAC7E,QAAM,EAAE,MAAM,OAAO,QAAI,qCAA0C,GAAG,CAAC;AACvE,MAAI,OAAO,SAAS,UAAU;AAC7B,WAAO,IAAI,qBAAqB,MAAM,OAAO,QAAQ;AAAA,EACtD;AACA,SAAO,IAAI,qBAAqB,MAAM,OAAO,QAAQ;AACtD;","names":[]}
|