@fragno-dev/db 0.1.6 → 0.1.7
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/.turbo/turbo-build.log +212 -207
- package/CHANGELOG.md +8 -0
- package/dist/adapters/adapters.d.ts +6 -1
- package/dist/adapters/adapters.d.ts.map +1 -1
- package/dist/adapters/adapters.js +7 -1
- package/dist/adapters/adapters.js.map +1 -0
- package/dist/adapters/drizzle/drizzle-adapter.d.ts +5 -2
- package/dist/adapters/drizzle/drizzle-adapter.d.ts.map +1 -1
- package/dist/adapters/drizzle/drizzle-adapter.js +23 -14
- package/dist/adapters/drizzle/drizzle-adapter.js.map +1 -1
- package/dist/adapters/drizzle/drizzle-connection-pool.js +40 -0
- package/dist/adapters/drizzle/drizzle-connection-pool.js.map +1 -0
- package/dist/adapters/drizzle/drizzle-query.js +24 -11
- package/dist/adapters/drizzle/drizzle-query.js.map +1 -1
- package/dist/adapters/drizzle/drizzle-uow-compiler.d.ts.map +1 -1
- package/dist/adapters/drizzle/drizzle-uow-compiler.js +8 -8
- package/dist/adapters/drizzle/drizzle-uow-compiler.js.map +1 -1
- package/dist/adapters/drizzle/drizzle-uow-executor.js +12 -5
- package/dist/adapters/drizzle/drizzle-uow-executor.js.map +1 -1
- package/dist/adapters/kysely/kysely-adapter.d.ts +5 -2
- package/dist/adapters/kysely/kysely-adapter.d.ts.map +1 -1
- package/dist/adapters/kysely/kysely-adapter.js +70 -39
- package/dist/adapters/kysely/kysely-adapter.js.map +1 -1
- package/dist/adapters/kysely/kysely-connection-pool.js +41 -0
- package/dist/adapters/kysely/kysely-connection-pool.js.map +1 -0
- package/dist/adapters/kysely/kysely-query-compiler.js +2 -3
- package/dist/adapters/kysely/kysely-query-compiler.js.map +1 -1
- package/dist/adapters/kysely/kysely-query.js +22 -11
- package/dist/adapters/kysely/kysely-query.js.map +1 -1
- package/dist/adapters/kysely/kysely-uow-compiler.js +5 -5
- package/dist/adapters/kysely/kysely-uow-compiler.js.map +1 -1
- package/dist/adapters/kysely/migration/execute-factory.js +8 -2
- package/dist/adapters/kysely/migration/execute-factory.js.map +1 -1
- package/dist/migration-engine/generation-engine.d.ts.map +1 -1
- package/dist/migration-engine/generation-engine.js +8 -1
- package/dist/migration-engine/generation-engine.js.map +1 -1
- package/dist/mod.d.ts +1 -1
- package/dist/mod.d.ts.map +1 -1
- package/dist/mod.js.map +1 -1
- package/dist/node_modules/.pnpm/{drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8 → drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260}/node_modules/drizzle-orm/alias.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/alias.js.map +1 -0
- package/dist/node_modules/.pnpm/{drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8 → drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260}/node_modules/drizzle-orm/casing.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/casing.js.map +1 -0
- package/dist/node_modules/.pnpm/{drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8 → drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260}/node_modules/drizzle-orm/column-builder.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/column-builder.js.map +1 -0
- package/dist/node_modules/.pnpm/{drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8 → drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260}/node_modules/drizzle-orm/column.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/column.js.map +1 -0
- package/dist/node_modules/.pnpm/{drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8 → drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260}/node_modules/drizzle-orm/entity.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/entity.js.map +1 -0
- package/dist/node_modules/.pnpm/{drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8 → drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260}/node_modules/drizzle-orm/errors.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/errors.js.map +1 -0
- package/dist/node_modules/.pnpm/{drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8 → drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260}/node_modules/drizzle-orm/pg-core/columns/common.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/pg-core/columns/common.js.map +1 -0
- package/dist/node_modules/.pnpm/{drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8 → drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260}/node_modules/drizzle-orm/pg-core/columns/enum.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/pg-core/columns/enum.js.map +1 -0
- package/dist/node_modules/.pnpm/{drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8 → drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260}/node_modules/drizzle-orm/pg-core/foreign-keys.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/pg-core/foreign-keys.js.map +1 -0
- package/dist/node_modules/.pnpm/{drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8 → drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260}/node_modules/drizzle-orm/pg-core/unique-constraint.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/pg-core/unique-constraint.js.map +1 -0
- package/dist/node_modules/.pnpm/{drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8 → drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260}/node_modules/drizzle-orm/pg-core/utils/array.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/pg-core/utils/array.js.map +1 -0
- package/dist/node_modules/.pnpm/{drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8 → drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260}/node_modules/drizzle-orm/query-builders/query-builder.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/query-builders/query-builder.js.map +1 -0
- package/dist/node_modules/.pnpm/{drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8 → drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260}/node_modules/drizzle-orm/query-promise.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/query-promise.js.map +1 -0
- package/dist/node_modules/.pnpm/{drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8 → drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260}/node_modules/drizzle-orm/relations.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/relations.js.map +1 -0
- package/dist/node_modules/.pnpm/{drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8 → drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260}/node_modules/drizzle-orm/selection-proxy.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/selection-proxy.js.map +1 -0
- package/dist/node_modules/.pnpm/{drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8 → drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260}/node_modules/drizzle-orm/sql/expressions/conditions.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/sql/expressions/conditions.js.map +1 -0
- package/dist/node_modules/.pnpm/{drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8 → drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260}/node_modules/drizzle-orm/sql/expressions/select.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/sql/expressions/select.js.map +1 -0
- package/dist/node_modules/.pnpm/{drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8 → drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260}/node_modules/drizzle-orm/sql/functions/aggregate.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/sql/functions/aggregate.js.map +1 -0
- package/dist/node_modules/.pnpm/{drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8 → drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260}/node_modules/drizzle-orm/sql/sql.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/sql/sql.js.map +1 -0
- package/dist/node_modules/.pnpm/{drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8 → drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260}/node_modules/drizzle-orm/sqlite-core/columns/common.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/sqlite-core/columns/common.js.map +1 -0
- package/dist/node_modules/.pnpm/{drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8 → drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260}/node_modules/drizzle-orm/sqlite-core/db.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/sqlite-core/db.js.map +1 -0
- package/dist/node_modules/.pnpm/{drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8 → drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260}/node_modules/drizzle-orm/sqlite-core/dialect.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/sqlite-core/dialect.js.map +1 -0
- package/dist/node_modules/.pnpm/{drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8 → drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260}/node_modules/drizzle-orm/sqlite-core/foreign-keys.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/sqlite-core/foreign-keys.js.map +1 -0
- package/dist/node_modules/.pnpm/{drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8 → drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260}/node_modules/drizzle-orm/sqlite-core/query-builders/count.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/sqlite-core/query-builders/count.js.map +1 -0
- package/dist/node_modules/.pnpm/{drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8 → drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260}/node_modules/drizzle-orm/sqlite-core/query-builders/delete.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/sqlite-core/query-builders/delete.js.map +1 -0
- package/dist/node_modules/.pnpm/{drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8 → drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260}/node_modules/drizzle-orm/sqlite-core/query-builders/insert.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/sqlite-core/query-builders/insert.js.map +1 -0
- package/dist/node_modules/.pnpm/{drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8 → drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260}/node_modules/drizzle-orm/sqlite-core/query-builders/query-builder.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/sqlite-core/query-builders/query-builder.js.map +1 -0
- package/dist/node_modules/.pnpm/{drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8 → drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260}/node_modules/drizzle-orm/sqlite-core/query-builders/query.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/sqlite-core/query-builders/query.js.map +1 -0
- package/dist/node_modules/.pnpm/{drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8 → drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260}/node_modules/drizzle-orm/sqlite-core/query-builders/raw.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/sqlite-core/query-builders/raw.js.map +1 -0
- package/dist/node_modules/.pnpm/{drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8 → drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260}/node_modules/drizzle-orm/sqlite-core/query-builders/select.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/sqlite-core/query-builders/select.js.map +1 -0
- package/dist/node_modules/.pnpm/{drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8 → drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260}/node_modules/drizzle-orm/sqlite-core/query-builders/update.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/sqlite-core/query-builders/update.js.map +1 -0
- package/dist/node_modules/.pnpm/{drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8 → drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260}/node_modules/drizzle-orm/sqlite-core/table.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/sqlite-core/table.js.map +1 -0
- package/dist/node_modules/.pnpm/{drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8 → drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260}/node_modules/drizzle-orm/sqlite-core/unique-constraint.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/sqlite-core/unique-constraint.js.map +1 -0
- package/dist/node_modules/.pnpm/{drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8 → drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260}/node_modules/drizzle-orm/sqlite-core/utils.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/sqlite-core/utils.js.map +1 -0
- package/dist/node_modules/.pnpm/{drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8 → drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260}/node_modules/drizzle-orm/sqlite-core/view-base.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/sqlite-core/view-base.js.map +1 -0
- package/dist/node_modules/.pnpm/{drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8 → drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260}/node_modules/drizzle-orm/subquery.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/subquery.js.map +1 -0
- package/dist/node_modules/.pnpm/{drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8 → drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260}/node_modules/drizzle-orm/table.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/table.js.map +1 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/table.utils.js +6 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/table.utils.js.map +1 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/tracing-utils.js +8 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/tracing-utils.js.map +1 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/tracing.js +8 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/tracing.js.map +1 -0
- package/dist/node_modules/.pnpm/{drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8 → drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260}/node_modules/drizzle-orm/utils.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/utils.js.map +1 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/view-common.js +6 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@libsql_client@0.15.15_@types_better-sql_aee8b50e4fe3dba0cf9f533329f36260/node_modules/drizzle-orm/view-common.js.map +1 -0
- package/package.json +4 -5
- package/src/adapters/adapters.ts +8 -0
- package/src/adapters/drizzle/drizzle-adapter-sqlite.test.ts +9 -11
- package/src/adapters/drizzle/drizzle-adapter.ts +31 -16
- package/src/adapters/drizzle/drizzle-connection-pool.ts +66 -0
- package/src/adapters/drizzle/drizzle-query.ts +33 -16
- package/src/adapters/drizzle/drizzle-uow-compiler.test.ts +57 -62
- package/src/adapters/drizzle/drizzle-uow-compiler.ts +16 -6
- package/src/adapters/drizzle/drizzle-uow-executor.ts +27 -4
- package/src/adapters/kysely/kysely-adapter.ts +94 -55
- package/src/adapters/kysely/kysely-connection-pool.ts +70 -0
- package/src/adapters/kysely/kysely-query-compiler.ts +10 -6
- package/src/adapters/kysely/kysely-query.ts +30 -17
- package/src/adapters/kysely/kysely-uow-compiler.test.ts +47 -47
- package/src/adapters/kysely/kysely-uow-compiler.ts +13 -8
- package/src/adapters/kysely/kysely-uow-joins.test.ts +34 -34
- package/src/adapters/kysely/migration/execute-factory.ts +24 -3
- package/src/fragment.test.ts +7 -0
- package/src/migration-engine/generation-engine.ts +18 -6
- package/src/mod.ts +1 -1
- package/src/shared/connection-pool.ts +24 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/alias.js.map +0 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/casing.js.map +0 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/column-builder.js.map +0 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/column.js.map +0 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/entity.js.map +0 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/errors.js.map +0 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/pg-core/columns/common.js.map +0 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/pg-core/columns/enum.js.map +0 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/pg-core/foreign-keys.js.map +0 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/pg-core/unique-constraint.js.map +0 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/pg-core/utils/array.js.map +0 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/query-builders/query-builder.js.map +0 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/query-promise.js.map +0 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/relations.js.map +0 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/selection-proxy.js.map +0 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sql/expressions/conditions.js.map +0 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sql/expressions/select.js.map +0 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sql/functions/aggregate.js.map +0 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sql/sql.js.map +0 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/columns/common.js.map +0 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/db.js.map +0 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/dialect.js.map +0 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/foreign-keys.js.map +0 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/query-builders/count.js.map +0 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/query-builders/delete.js.map +0 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/query-builders/insert.js.map +0 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/query-builders/query-builder.js.map +0 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/query-builders/query.js.map +0 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/query-builders/raw.js.map +0 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/query-builders/select.js.map +0 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/query-builders/update.js.map +0 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/table.js.map +0 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/unique-constraint.js.map +0 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/utils.js.map +0 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/view-base.js.map +0 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/subquery.js.map +0 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/table.js.map +0 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/table.utils.js +0 -6
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/table.utils.js.map +0 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/tracing-utils.js +0 -8
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/tracing-utils.js.map +0 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/tracing.js +0 -8
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/tracing.js.map +0 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/utils.js.map +0 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/view-common.js +0 -6
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/view-common.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drizzle-uow-executor.js","names":["queryChunks: SQLChunk[]","match: RegExpExecArray | null","chunks: SQLChunk[]","retrievalResults: DrizzleResult[]","result: DrizzleResult","createdInternalIds: (bigint | null)[]"],"sources":["../../../src/adapters/drizzle/drizzle-uow-executor.ts"],"sourcesContent":["import { SQL, StringChunk, sql, type SQLChunk } from \"drizzle-orm\";\nimport type { CompiledMutation, MutationResult } from \"../../query/unit-of-work\";\nimport type { DBType } from \"./shared\";\nimport type { DrizzleCompiledQuery } from \"./drizzle-uow-compiler\";\nimport type { DrizzleResult } from \"./shared\";\nimport { BaseSQLiteDatabase } from \"drizzle-orm/sqlite-core\";\nimport { SQLiteSyncDialect } from \"drizzle-orm/sqlite-core\";\n\ntype SyncSQLiteDB = BaseSQLiteDatabase<\n \"sync\",\n unknown,\n Record<string, never>,\n Record<string, never>\n>;\n\nfunction isSyncSQLite(db: unknown): boolean {\n return (\n db instanceof BaseSQLiteDatabase &&\n \"dialect\" in db &&\n (db as { dialect?: unknown }).dialect instanceof SQLiteSyncDialect\n );\n}\n\nfunction assertSyncSQLite(db: unknown): asserts db is SyncSQLiteDB {\n if (!isSyncSQLite(db)) {\n throw new Error(\"Expected synchronous SQLite database (better-sqlite3)\");\n }\n}\n\nfunction postgresToSQL(sqlString: string, params: unknown[]): SQLChunk[] {\n const placeholderRegex = /\\$(\\d+)/g;\n const queryChunks: SQLChunk[] = [];\n let lastIndex = 0;\n let match: RegExpExecArray | null;\n\n while ((match = placeholderRegex.exec(sqlString)) !== null) {\n const textBefore = sqlString.substring(lastIndex, match.index);\n if (textBefore) {\n queryChunks.push(new StringChunk(textBefore));\n }\n\n const paramIndex = parseInt(match[1]!, 10) - 1;\n queryChunks.push(sql.param(params[paramIndex]));\n\n lastIndex = match.index + match[0].length;\n }\n\n const textAfter = sqlString.substring(lastIndex);\n if (textAfter) {\n queryChunks.push(new StringChunk(textAfter));\n }\n\n return queryChunks;\n}\n\nfunction sqliteToSQL(sqlString: string, params: unknown[]): SQLChunk[] {\n const chunks: SQLChunk[] = [];\n let currentIndex = 0;\n\n const parts = sqlString.split(\"?\");\n for (let i = 0; i < parts.length; i++) {\n if (parts[i]) {\n chunks.push(new StringChunk(parts[i]));\n }\n if (i < parts.length - 1 && currentIndex < params.length) {\n chunks.push(sql.param(params[currentIndex++]));\n }\n }\n\n return chunks;\n}\n\nfunction toSQL(query: DrizzleCompiledQuery, provider: \"sqlite\" | \"mysql\" | \"postgresql\"): SQL {\n const { sql: sqlString, params } = query;\n\n const queryChunks =\n provider === \"sqlite\" ? sqliteToSQL(sqlString, params) : postgresToSQL(sqlString, params);\n\n return new SQL(queryChunks);\n}\n\nfunction getAffectedRows(result: unknown): number {\n if (Array.isArray(result)) {\n return result.length;\n }\n\n if (result && typeof result === \"object\") {\n if (\"affectedRows\" in result && typeof result[\"affectedRows\"] === \"number\") {\n return result[\"affectedRows\"];\n }\n\n if (\n \"rowCount\" in result &&\n (typeof result[\"rowCount\"] === \"number\" || typeof result[\"rowCount\"] === \"bigint\")\n ) {\n const rowCount = result[\"rowCount\"];\n if (rowCount > Number.MAX_SAFE_INTEGER) {\n throw new Error(\n `rowCount BigInt value ${rowCount.toString()} exceeds JS safe integer range`,\n );\n }\n return Number(rowCount);\n }\n\n if (\"changes\" in result && typeof result[\"changes\"] === \"number\") {\n return result[\"changes\"];\n }\n }\n\n throw new Error(`Unable to determine affected rows from result: ${JSON.stringify(result)}`);\n}\n\nasync function executeInTransaction(\n db: DBType,\n provider: \"sqlite\" | \"mysql\" | \"postgresql\",\n syncExecutor: (db: SyncSQLiteDB) => void,\n asyncExecutor: (tx: { execute: (sql: SQL) => Promise<unknown> }) => Promise<void>,\n): Promise<void> {\n if (provider === \"sqlite\" && isSyncSQLite(db)) {\n assertSyncSQLite(db);\n db.transaction(() => syncExecutor(db));\n } else {\n await db.transaction(\n async (tx) => await asyncExecutor(tx as { execute: (sql: SQL) => Promise<unknown> }),\n );\n }\n}\n\nfunction extractCreatedInternalId(result: unknown): bigint | null {\n if (result && typeof result === \"object\" && \"lastInsertRowid\" in result) {\n if (typeof result.lastInsertRowid === \"bigint\") {\n return result.lastInsertRowid;\n }\n\n if (typeof result.lastInsertRowid === \"number\") {\n return BigInt(result.lastInsertRowid);\n }\n\n throw new Error(`Unexpected lastInsertRowid type: ${typeof result.lastInsertRowid}`);\n }\n\n if (Array.isArray(result) && result.length > 0) {\n const row = result[0] as Record<string, unknown>;\n if (\"_internalId\" in row || \"_internal_id\" in row) {\n return (row[\"_internalId\"] ?? row[\"_internal_id\"]) as bigint;\n }\n }\n\n return null;\n}\n\nfunction validateAffectedRows(result: unknown, expected: number): void {\n const actual = getAffectedRows(result);\n if (actual !== expected) {\n throw new Error(`Version conflict: expected ${expected} rows affected, but got ${actual}`);\n }\n}\n\n/**\n * Execute the retrieval phase of a Unit of Work using Drizzle\n *\n * All retrieval queries are executed inside a single transaction to ensure\n * snapshot isolation - all reads see a consistent view of the database.\n */\nexport async function executeDrizzleRetrievalPhase(\n db: DBType,\n retrievalBatch: DrizzleCompiledQuery[],\n provider: \"sqlite\" | \"mysql\" | \"postgresql\",\n): Promise<DrizzleResult[]> {\n if (retrievalBatch.length === 0) {\n return [];\n }\n\n const retrievalResults: DrizzleResult[] = [];\n\n await executeInTransaction(\n db,\n provider,\n (syncDb) => {\n for (const query of retrievalBatch) {\n const sqlObj = toSQL(query, provider);\n const rows = syncDb.all(sqlObj as never) as Record<string, unknown>[];\n const result: DrizzleResult = { rows, affectedRows: 0 };\n retrievalResults.push(result);\n }\n },\n async (tx) => {\n for (const query of retrievalBatch) {\n const result = (await tx.execute(toSQL(query, provider))) as DrizzleResult;\n retrievalResults.push(result);\n }\n },\n );\n\n return retrievalResults;\n}\n\n/**\n * Execute the mutation phase of a Unit of Work using Drizzle\n *\n * All mutation queries are executed in a transaction with optimistic locking.\n * If any version check fails, the entire transaction is rolled back and\n * success=false is returned.\n */\nexport async function executeDrizzleMutationPhase(\n db: DBType,\n mutationBatch: CompiledMutation<DrizzleCompiledQuery>[],\n provider: \"sqlite\" | \"mysql\" | \"postgresql\",\n): Promise<MutationResult> {\n if (mutationBatch.length === 0) {\n return { success: true, createdInternalIds: [] };\n }\n\n const createdInternalIds: (bigint | null)[] = [];\n\n try {\n await executeInTransaction(\n db,\n provider,\n (syncDb) => {\n for (const { query, expectedAffectedRows } of mutationBatch) {\n const sqlObj = toSQL(query, provider);\n // Type assertion needed due to drizzle-orm version mismatch in dependencies\n const result = syncDb.run(sqlObj as never);\n\n if (expectedAffectedRows === null) {\n createdInternalIds.push(extractCreatedInternalId(result));\n } else {\n validateAffectedRows(result, expectedAffectedRows);\n }\n }\n },\n async (tx) => {\n for (const { query, expectedAffectedRows } of mutationBatch) {\n const result = await tx.execute(toSQL(query, provider));\n\n if (expectedAffectedRows === null) {\n createdInternalIds.push(extractCreatedInternalId(result));\n } else {\n validateAffectedRows(result, expectedAffectedRows);\n }\n }\n },\n );\n\n return { success: true, createdInternalIds };\n } catch (error) {\n if (error instanceof Error && error.message.includes(\"Version conflict\")) {\n return { success: false };\n }\n throw error;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"drizzle-uow-executor.js","names":["queryChunks: SQLChunk[]","match: RegExpExecArray | null","chunks: SQLChunk[]","retrievalResults: DrizzleResult[]","result: DrizzleResult","createdInternalIds: (bigint | null)[]"],"sources":["../../../src/adapters/drizzle/drizzle-uow-executor.ts"],"sourcesContent":["import { SQL, StringChunk, sql, type SQLChunk } from \"drizzle-orm\";\nimport type { CompiledMutation, MutationResult } from \"../../query/unit-of-work\";\nimport type { DBType } from \"./shared\";\nimport type { DrizzleCompiledQuery } from \"./drizzle-uow-compiler\";\nimport type { DrizzleResult } from \"./shared\";\nimport { BaseSQLiteDatabase } from \"drizzle-orm/sqlite-core\";\nimport { SQLiteSyncDialect } from \"drizzle-orm/sqlite-core\";\n\ntype SyncSQLiteDB = BaseSQLiteDatabase<\n \"sync\",\n unknown,\n Record<string, never>,\n Record<string, never>\n>;\n\nfunction isSyncSQLite(db: unknown): boolean {\n return (\n db instanceof BaseSQLiteDatabase &&\n \"dialect\" in db &&\n (db as { dialect?: unknown }).dialect instanceof SQLiteSyncDialect\n );\n}\n\nfunction assertSyncSQLite(db: unknown): asserts db is SyncSQLiteDB {\n if (!isSyncSQLite(db)) {\n throw new Error(\"Expected synchronous SQLite database (better-sqlite3)\");\n }\n}\n\nfunction postgresToSQL(sqlString: string, params: unknown[]): SQLChunk[] {\n const placeholderRegex = /\\$(\\d+)/g;\n const queryChunks: SQLChunk[] = [];\n let lastIndex = 0;\n let match: RegExpExecArray | null;\n\n while ((match = placeholderRegex.exec(sqlString)) !== null) {\n const textBefore = sqlString.substring(lastIndex, match.index);\n if (textBefore) {\n queryChunks.push(new StringChunk(textBefore));\n }\n\n const paramIndex = parseInt(match[1]!, 10) - 1;\n queryChunks.push(sql.param(params[paramIndex]));\n\n lastIndex = match.index + match[0].length;\n }\n\n const textAfter = sqlString.substring(lastIndex);\n if (textAfter) {\n queryChunks.push(new StringChunk(textAfter));\n }\n\n return queryChunks;\n}\n\nfunction sqliteToSQL(sqlString: string, params: unknown[]): SQLChunk[] {\n const chunks: SQLChunk[] = [];\n let currentIndex = 0;\n\n const parts = sqlString.split(\"?\");\n for (let i = 0; i < parts.length; i++) {\n if (parts[i]) {\n chunks.push(new StringChunk(parts[i]));\n }\n if (i < parts.length - 1 && currentIndex < params.length) {\n chunks.push(sql.param(params[currentIndex++]));\n }\n }\n\n return chunks;\n}\n\nfunction toSQL(query: DrizzleCompiledQuery, provider: \"sqlite\" | \"mysql\" | \"postgresql\"): SQL {\n const { sql: sqlString, params } = query;\n\n const queryChunks =\n provider === \"sqlite\" ? sqliteToSQL(sqlString, params) : postgresToSQL(sqlString, params);\n\n return new SQL(queryChunks);\n}\n\nfunction getAffectedRows(result: unknown): number {\n if (Array.isArray(result)) {\n return result.length;\n }\n\n if (result && typeof result === \"object\") {\n // libsql uses rowsAffected\n if (\"rowsAffected\" in result && typeof result[\"rowsAffected\"] === \"number\") {\n return result[\"rowsAffected\"];\n }\n\n if (\"affectedRows\" in result && typeof result[\"affectedRows\"] === \"number\") {\n return result[\"affectedRows\"];\n }\n\n if (\n \"rowCount\" in result &&\n (typeof result[\"rowCount\"] === \"number\" || typeof result[\"rowCount\"] === \"bigint\")\n ) {\n const rowCount = result[\"rowCount\"];\n if (rowCount > Number.MAX_SAFE_INTEGER) {\n throw new Error(\n `rowCount BigInt value ${rowCount.toString()} exceeds JS safe integer range`,\n );\n }\n return Number(rowCount);\n }\n\n if (\"changes\" in result && typeof result[\"changes\"] === \"number\") {\n return result[\"changes\"];\n }\n }\n\n throw new Error(`Unable to determine affected rows from result: ${JSON.stringify(result)}`);\n}\n\nasync function executeInTransaction(\n db: DBType,\n provider: \"sqlite\" | \"mysql\" | \"postgresql\",\n syncExecutor: (db: SyncSQLiteDB) => void,\n asyncExecutor: (tx: {\n execute?: (sql: SQL) => Promise<unknown>;\n run?: (sql: SQL) => Promise<unknown>;\n }) => Promise<void>,\n): Promise<void> {\n if (provider === \"sqlite\" && isSyncSQLite(db)) {\n assertSyncSQLite(db);\n db.transaction(() => syncExecutor(db));\n } else {\n await db.transaction(\n async (tx) =>\n await asyncExecutor(\n tx as { execute?: (sql: SQL) => Promise<unknown>; run?: (sql: SQL) => Promise<unknown> },\n ),\n );\n }\n}\n\nfunction extractCreatedInternalId(result: unknown): bigint | null {\n if (result && typeof result === \"object\" && \"lastInsertRowid\" in result) {\n if (typeof result.lastInsertRowid === \"bigint\") {\n return result.lastInsertRowid;\n }\n\n if (typeof result.lastInsertRowid === \"number\") {\n return BigInt(result.lastInsertRowid);\n }\n\n throw new Error(`Unexpected lastInsertRowid type: ${typeof result.lastInsertRowid}`);\n }\n\n if (Array.isArray(result) && result.length > 0) {\n const row = result[0] as Record<string, unknown>;\n if (\"_internalId\" in row || \"_internal_id\" in row) {\n return (row[\"_internalId\"] ?? row[\"_internal_id\"]) as bigint;\n }\n }\n\n return null;\n}\n\nfunction validateAffectedRows(result: unknown, expected: number): void {\n const actual = getAffectedRows(result);\n if (actual !== expected) {\n throw new Error(`Version conflict: expected ${expected} rows affected, but got ${actual}`);\n }\n}\n\n/**\n * Execute the retrieval phase of a Unit of Work using Drizzle\n *\n * All retrieval queries are executed inside a single transaction to ensure\n * snapshot isolation - all reads see a consistent view of the database.\n */\nexport async function executeDrizzleRetrievalPhase(\n db: DBType,\n retrievalBatch: DrizzleCompiledQuery[],\n provider: \"sqlite\" | \"mysql\" | \"postgresql\",\n): Promise<DrizzleResult[]> {\n if (retrievalBatch.length === 0) {\n return [];\n }\n\n const retrievalResults: DrizzleResult[] = [];\n\n await executeInTransaction(\n db,\n provider,\n (syncDb) => {\n for (const query of retrievalBatch) {\n const sqlObj = toSQL(query, provider);\n const rows = syncDb.all(sqlObj as never) as Record<string, unknown>[];\n const result: DrizzleResult = { rows, affectedRows: 0 };\n retrievalResults.push(result);\n }\n },\n async (tx) => {\n for (const query of retrievalBatch) {\n const sqlObj = toSQL(query, provider);\n // Fallback to run when execute is not available (e.g., libsql)\n const executeMethod = tx.execute ?? tx.run;\n if (!executeMethod) {\n throw new Error(\"Transaction object has neither execute nor run method\");\n }\n const result = (await executeMethod.call(tx, sqlObj)) as DrizzleResult;\n retrievalResults.push(result);\n }\n },\n );\n\n return retrievalResults;\n}\n\n/**\n * Execute the mutation phase of a Unit of Work using Drizzle\n *\n * All mutation queries are executed in a transaction with optimistic locking.\n * If any version check fails, the entire transaction is rolled back and\n * success=false is returned.\n */\nexport async function executeDrizzleMutationPhase(\n db: DBType,\n mutationBatch: CompiledMutation<DrizzleCompiledQuery>[],\n provider: \"sqlite\" | \"mysql\" | \"postgresql\",\n): Promise<MutationResult> {\n if (mutationBatch.length === 0) {\n return { success: true, createdInternalIds: [] };\n }\n\n const createdInternalIds: (bigint | null)[] = [];\n\n try {\n await executeInTransaction(\n db,\n provider,\n (syncDb) => {\n for (const { query, expectedAffectedRows } of mutationBatch) {\n const sqlObj = toSQL(query, provider);\n // Type assertion needed due to drizzle-orm version mismatch in dependencies\n const result = syncDb.run(sqlObj as never);\n\n if (expectedAffectedRows === null) {\n createdInternalIds.push(extractCreatedInternalId(result));\n } else {\n validateAffectedRows(result, expectedAffectedRows);\n }\n }\n },\n async (tx) => {\n for (const { query, expectedAffectedRows } of mutationBatch) {\n const sqlObj = toSQL(query, provider);\n // Fallback to run when execute is not available (e.g., libsql)\n const executeMethod = tx.execute ?? tx.run;\n if (!executeMethod) {\n throw new Error(\"Transaction object has neither execute nor run method\");\n }\n const result = await executeMethod.call(tx, sqlObj);\n\n if (expectedAffectedRows === null) {\n createdInternalIds.push(extractCreatedInternalId(result));\n } else {\n validateAffectedRows(result, expectedAffectedRows);\n }\n }\n },\n );\n\n return { success: true, createdInternalIds };\n } catch (error) {\n if (error instanceof Error && error.message.includes(\"Version conflict\")) {\n return { success: false };\n }\n throw error;\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,19 +1,22 @@
|
|
|
1
1
|
import { AnySchema } from "../../schema/create.js";
|
|
2
2
|
import { Migrator } from "../../migration-engine/create.js";
|
|
3
3
|
import { AbstractQuery } from "../../query/query.js";
|
|
4
|
-
import { DatabaseAdapter } from "../adapters.js";
|
|
4
|
+
import { DatabaseAdapter, fragnoDatabaseAdapterNameFakeSymbol, fragnoDatabaseAdapterVersionFakeSymbol } from "../adapters.js";
|
|
5
5
|
import { SQLProvider } from "../../shared/providers.js";
|
|
6
6
|
import { Kysely } from "kysely";
|
|
7
7
|
|
|
8
8
|
//#region src/adapters/kysely/kysely-adapter.d.ts
|
|
9
9
|
type KyselyAny = Kysely<any>;
|
|
10
10
|
interface KyselyConfig {
|
|
11
|
-
db: KyselyAny | (() => KyselyAny);
|
|
11
|
+
db: KyselyAny | (() => KyselyAny | Promise<KyselyAny>);
|
|
12
12
|
provider: SQLProvider;
|
|
13
13
|
}
|
|
14
14
|
declare class KyselyAdapter implements DatabaseAdapter {
|
|
15
15
|
#private;
|
|
16
16
|
constructor(config: KyselyConfig);
|
|
17
|
+
get [fragnoDatabaseAdapterNameFakeSymbol](): string;
|
|
18
|
+
get [fragnoDatabaseAdapterVersionFakeSymbol](): number;
|
|
19
|
+
close(): Promise<void>;
|
|
17
20
|
createQueryEngine<T extends AnySchema>(schema: T, namespace: string): AbstractQuery<T>;
|
|
18
21
|
isConnectionHealthy(): Promise<boolean>;
|
|
19
22
|
createMigrationEngine(schema: AnySchema, namespace: string): Migrator;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kysely-adapter.d.ts","names":[],"sources":["../../../src/adapters/kysely/kysely-adapter.ts"],"sourcesContent":[],"mappings":";;;;;;;;
|
|
1
|
+
{"version":3,"file":"kysely-adapter.d.ts","names":[],"sources":["../../../src/adapters/kysely/kysely-adapter.ts"],"sourcesContent":[],"mappings":";;;;;;;;KAoBK,SAAA,GAAY;UAEA,YAAA;EAFZ,EAAA,EAGC,SAHQ,GAAA,CAAA,GAAA,GAGW,SAHF,GAGc,OAHd,CAGsB,SAHtB,CAAA,CAAA;EAEN,QAAA,EAEL,WAFiB;;AACJ,cAIZ,aAAA,YAAyB,eAJb,CAAA;EAAoB,CAAA,OAAA;EAAR,WAAA,CAAA,MAAA,EAQf,YARe;EACzB,KAYL,mCAAA,GAZK,EAAA,MAAA;EAAW,KAgBhB,sCAAA,GAhBgB,EAAA,MAAA;EAGV,KAAA,CAAA,CAAA,EAiBI,OAjBU,CAAA,IAAA,CAAA;EAIL,iBAAA,CAAA,UAiBQ,SAjBR,CAAA,CAAA,MAAA,EAiB2B,CAjB3B,EAAA,SAAA,EAAA,MAAA,CAAA,EAiBkD,aAjBlD,CAiBgE,CAjBhE,CAAA;EAKf,mBAAA,CAAA,CAAA,EAkBwB,OAlBxB,CAAA,OAAA,CAAA;EAIA,qBAAA,CAAA,MAAA,EA0ByB,SA1BzB,EAAA,SAAA,EAAA,MAAA,CAAA,EA0BwD,QA1BxD;EAIU,gBAAA,CAAA,SAAA,EAAA,MAAA,CAAA,EAgJ4B,OAhJ5B,CAAA,MAAA,GAAA,SAAA,CAAA"}
|
|
@@ -1,42 +1,52 @@
|
|
|
1
|
+
import { fragnoDatabaseAdapterNameFakeSymbol, fragnoDatabaseAdapterVersionFakeSymbol } from "../adapters.js";
|
|
1
2
|
import { SETTINGS_TABLE_NAME } from "../../shared/settings-schema.js";
|
|
2
3
|
import { createMigrator } from "../../migration-engine/create.js";
|
|
3
4
|
import { execute, preprocessOperations } from "./migration/execute.js";
|
|
4
5
|
import { fromKysely } from "./kysely-query.js";
|
|
5
6
|
import { createTableNameMapper } from "./kysely-shared.js";
|
|
7
|
+
import { createKyselyConnectionPool } from "./kysely-connection-pool.js";
|
|
6
8
|
import { sql } from "kysely";
|
|
7
9
|
import { createHash } from "node:crypto";
|
|
8
10
|
|
|
9
11
|
//#region src/adapters/kysely/kysely-adapter.ts
|
|
10
12
|
var KyselyAdapter = class {
|
|
11
|
-
#
|
|
13
|
+
#connectionPool;
|
|
14
|
+
#provider;
|
|
12
15
|
constructor(config) {
|
|
13
|
-
this.#
|
|
16
|
+
this.#connectionPool = createKyselyConnectionPool(config.db);
|
|
17
|
+
this.#provider = config.provider;
|
|
14
18
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
19
|
+
get [fragnoDatabaseAdapterNameFakeSymbol]() {
|
|
20
|
+
return "kysely";
|
|
21
|
+
}
|
|
22
|
+
get [fragnoDatabaseAdapterVersionFakeSymbol]() {
|
|
23
|
+
return 0;
|
|
24
|
+
}
|
|
25
|
+
async close() {
|
|
26
|
+
await this.#connectionPool.close();
|
|
18
27
|
}
|
|
19
28
|
createQueryEngine(schema, namespace) {
|
|
20
29
|
const mapper = namespace ? createTableNameMapper(namespace) : void 0;
|
|
21
|
-
return fromKysely(schema,
|
|
22
|
-
db: this.#getDb(),
|
|
23
|
-
provider: this.#kyselyConfig.provider
|
|
24
|
-
}, mapper);
|
|
30
|
+
return fromKysely(schema, this.#connectionPool, this.#provider, mapper);
|
|
25
31
|
}
|
|
26
32
|
async isConnectionHealthy() {
|
|
33
|
+
const conn = await this.#connectionPool.connect();
|
|
27
34
|
try {
|
|
28
|
-
|
|
29
|
-
return (await db.executeQuery(sql`SELECT 1 as healthy`.compile(db))).rows[0]["healthy"] === 1;
|
|
35
|
+
return (await conn.db.executeQuery(sql`SELECT 1 as healthy`.compile(conn.db))).rows[0]["healthy"] === 1;
|
|
30
36
|
} catch {
|
|
31
37
|
return false;
|
|
38
|
+
} finally {
|
|
39
|
+
await conn.release();
|
|
32
40
|
}
|
|
33
41
|
}
|
|
34
42
|
createMigrationEngine(schema, namespace) {
|
|
35
|
-
const manager = createSettingsManager(this.#getDb(), namespace);
|
|
36
43
|
const mapper = namespace ? createTableNameMapper(namespace) : void 0;
|
|
37
|
-
const preprocessMigrationOperations = (operations) => {
|
|
38
|
-
let preprocessed = preprocessOperations(operations,
|
|
39
|
-
|
|
44
|
+
const preprocessMigrationOperations = (operations, db) => {
|
|
45
|
+
let preprocessed = preprocessOperations(operations, {
|
|
46
|
+
db,
|
|
47
|
+
provider: this.#provider
|
|
48
|
+
});
|
|
49
|
+
if (this.#provider === "mysql") {
|
|
40
50
|
preprocessed.unshift({
|
|
41
51
|
type: "custom",
|
|
42
52
|
sql: "SET FOREIGN_KEY_CHECKS = 0"
|
|
@@ -60,50 +70,71 @@ var KyselyAdapter = class {
|
|
|
60
70
|
}
|
|
61
71
|
};
|
|
62
72
|
};
|
|
63
|
-
const
|
|
73
|
+
const config = {
|
|
64
74
|
db,
|
|
65
|
-
provider: this.#
|
|
75
|
+
provider: this.#provider
|
|
66
76
|
};
|
|
67
|
-
return operations.flatMap((op) => execute(op,
|
|
77
|
+
return operations.flatMap((op) => execute(op, config, (node) => onCustomNode(node, db), mapper));
|
|
68
78
|
};
|
|
69
79
|
return createMigrator({
|
|
70
80
|
schema,
|
|
71
81
|
executor: async (operations) => {
|
|
72
|
-
const
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
82
|
+
const conn = await this.#connectionPool.connect();
|
|
83
|
+
try {
|
|
84
|
+
if (this.#provider === "sqlite") await sql.raw("PRAGMA defer_foreign_keys = ON").execute(conn.db);
|
|
85
|
+
await conn.db.transaction().execute(async (tx) => {
|
|
86
|
+
const nodes = toExecutableNodes(preprocessMigrationOperations(operations, tx), tx);
|
|
87
|
+
for (const node of nodes) try {
|
|
88
|
+
await node.execute();
|
|
89
|
+
} catch (e) {
|
|
90
|
+
console.error("failed at", node.compile(), e);
|
|
91
|
+
throw e;
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
} finally {
|
|
95
|
+
await conn.release();
|
|
96
|
+
}
|
|
83
97
|
},
|
|
84
98
|
sql: { toSql: (operations) => {
|
|
85
99
|
const parts = [];
|
|
86
|
-
if (this.#
|
|
87
|
-
const
|
|
100
|
+
if (this.#provider === "sqlite") parts.push("PRAGMA defer_foreign_keys = ON;");
|
|
101
|
+
const db = this.#connectionPool.getDatabaseSync();
|
|
102
|
+
const compiled = toExecutableNodes(preprocessMigrationOperations(operations, db), db).map((node) => `${node.compile().sql};`);
|
|
88
103
|
parts.push(...compiled);
|
|
89
104
|
return parts.join("\n\n");
|
|
90
105
|
} },
|
|
91
106
|
settings: {
|
|
92
107
|
getVersion: async () => {
|
|
93
|
-
const
|
|
94
|
-
|
|
108
|
+
const conn = await this.#connectionPool.connect();
|
|
109
|
+
try {
|
|
110
|
+
const v = await createSettingsManager(conn.db, namespace).get(`schema_version`);
|
|
111
|
+
return v ? parseInt(v) : 0;
|
|
112
|
+
} finally {
|
|
113
|
+
await conn.release();
|
|
114
|
+
}
|
|
95
115
|
},
|
|
96
116
|
updateSettingsInMigration: async (fromVersion, toVersion) => {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
117
|
+
const conn = await this.#connectionPool.connect();
|
|
118
|
+
try {
|
|
119
|
+
const manager = createSettingsManager(conn.db, namespace);
|
|
120
|
+
return [{
|
|
121
|
+
type: "custom",
|
|
122
|
+
sql: fromVersion === 0 ? manager.insert(`schema_version`, toVersion.toString()) : manager.update(`schema_version`, toVersion.toString())
|
|
123
|
+
}];
|
|
124
|
+
} finally {
|
|
125
|
+
await conn.release();
|
|
126
|
+
}
|
|
101
127
|
}
|
|
102
128
|
}
|
|
103
129
|
});
|
|
104
130
|
}
|
|
105
|
-
getSchemaVersion(namespace) {
|
|
106
|
-
|
|
131
|
+
async getSchemaVersion(namespace) {
|
|
132
|
+
const conn = await this.#connectionPool.connect();
|
|
133
|
+
try {
|
|
134
|
+
return await createSettingsManager(conn.db, namespace).get(`schema_version`);
|
|
135
|
+
} finally {
|
|
136
|
+
await conn.release();
|
|
137
|
+
}
|
|
107
138
|
}
|
|
108
139
|
};
|
|
109
140
|
function createSettingsManager(db, namespace) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kysely-adapter.js","names":["#kyselyConfig","#getDb","db","dbConfig: KyselyConfig","parts: string[]"],"sources":["../../../src/adapters/kysely/kysely-adapter.ts"],"sourcesContent":["import { sql, type Kysely } from \"kysely\";\nimport type { SQLProvider } from \"../../shared/providers\";\nimport type { DatabaseAdapter } from \"../adapters\";\nimport { createMigrator, type Migrator } from \"../../migration-engine/create\";\nimport type { AnySchema } from \"../../schema/create\";\nimport type { CustomOperation, MigrationOperation } from \"../../migration-engine/shared\";\nimport { execute, preprocessOperations } from \"./migration/execute\";\nimport type { AbstractQuery } from \"../../query/query\";\nimport { fromKysely } from \"./kysely-query\";\nimport { createTableNameMapper } from \"./kysely-shared\";\nimport { createHash } from \"node:crypto\";\nimport { SETTINGS_TABLE_NAME } from \"../../shared/settings-schema\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype KyselyAny = Kysely<any>;\n\nexport interface KyselyConfig {\n db: KyselyAny | (() => KyselyAny);\n provider: SQLProvider;\n}\n\nexport class KyselyAdapter implements DatabaseAdapter {\n #kyselyConfig: KyselyConfig;\n\n constructor(config: KyselyConfig) {\n this.#kyselyConfig = config;\n }\n\n #getDb(): KyselyAny {\n const db = this.#kyselyConfig.db;\n return typeof db === \"function\" ? db() : db;\n }\n\n createQueryEngine<T extends AnySchema>(schema: T, namespace: string): AbstractQuery<T> {\n // Only create mapper if namespace is non-empty\n const mapper = namespace ? createTableNameMapper(namespace) : undefined;\n // Resolve the db instance if it's a function\n const resolvedConfig: KyselyConfig = {\n db: this.#getDb(),\n provider: this.#kyselyConfig.provider,\n };\n return fromKysely(schema, resolvedConfig, mapper);\n }\n\n async isConnectionHealthy(): Promise<boolean> {\n try {\n const db = this.#getDb();\n const result = await db.executeQuery(sql`SELECT 1 as healthy`.compile(db));\n return (result.rows[0] as Record<string, unknown>)[\"healthy\"] === 1;\n } catch {\n return false;\n }\n }\n\n createMigrationEngine(schema: AnySchema, namespace: string): Migrator {\n const manager = createSettingsManager(this.#getDb(), namespace);\n const mapper = namespace ? createTableNameMapper(namespace) : undefined;\n\n const preprocessMigrationOperations = (operations: MigrationOperation[]) => {\n let preprocessed = preprocessOperations(operations, this.#kyselyConfig);\n\n if (this.#kyselyConfig.provider === \"mysql\") {\n preprocessed.unshift({ type: \"custom\", sql: \"SET FOREIGN_KEY_CHECKS = 0\" });\n preprocessed.push({ type: \"custom\", sql: \"SET FOREIGN_KEY_CHECKS = 1\" });\n }\n\n return preprocessed;\n };\n\n // Convert operations to executable nodes bound to specific db instance\n const toExecutableNodes = (operations: MigrationOperation[], db: KyselyAny) => {\n const onCustomNode = (node: CustomOperation, db: KyselyAny) => {\n const statement = sql.raw(node[\"sql\"] as string);\n\n return {\n compile() {\n return statement.compile(db);\n },\n execute() {\n return statement.execute(db);\n },\n };\n };\n\n const dbConfig: KyselyConfig = { db, provider: this.#kyselyConfig.provider };\n return operations.flatMap((op) =>\n execute(op, dbConfig, (node) => onCustomNode(node, db), mapper),\n );\n };\n\n const migrator = createMigrator({\n schema,\n executor: async (operations) => {\n const db = this.#getDb();\n // For SQLite, execute PRAGMA defer_foreign_keys BEFORE transaction\n if (this.#kyselyConfig.provider === \"sqlite\") {\n await sql.raw(\"PRAGMA defer_foreign_keys = ON\").execute(db);\n }\n\n await db.transaction().execute(async (tx) => {\n const preprocessed = preprocessMigrationOperations(operations);\n const nodes = toExecutableNodes(preprocessed, tx);\n for (const node of nodes) {\n try {\n await node.execute();\n } catch (e) {\n console.error(\"failed at\", node.compile(), e);\n throw e;\n }\n }\n });\n },\n sql: {\n toSql: (operations) => {\n const parts: string[] = [];\n\n // Add SQLite PRAGMA at the beginning\n if (this.#kyselyConfig.provider === \"sqlite\") {\n parts.push(\"PRAGMA defer_foreign_keys = ON;\");\n }\n\n const preprocessed = preprocessMigrationOperations(operations);\n const nodes = toExecutableNodes(preprocessed, this.#getDb());\n const compiled = nodes.map((node) => `${node.compile().sql};`);\n\n parts.push(...compiled);\n\n return parts.join(\"\\n\\n\");\n },\n },\n\n settings: {\n getVersion: async () => {\n const v = await manager.get(`schema_version`);\n return v ? parseInt(v) : 0;\n },\n updateSettingsInMigration: async (fromVersion, toVersion) => {\n return [\n {\n type: \"custom\",\n sql:\n fromVersion === 0\n ? manager.insert(`schema_version`, toVersion.toString())\n : manager.update(`schema_version`, toVersion.toString()),\n },\n ];\n },\n },\n });\n\n return migrator;\n }\n\n getSchemaVersion(namespace: string) {\n const manager = createSettingsManager(this.#getDb(), namespace);\n\n return manager.get(`schema_version`);\n }\n}\n\nfunction createSettingsManager(db: KyselyAny, namespace: string) {\n // Settings table is never namespaced, but keys include namespace prefix\n const tableName = SETTINGS_TABLE_NAME;\n\n return {\n async get(key: string): Promise<string | undefined> {\n try {\n const result = await db\n .selectFrom(tableName)\n .where(\"key\", \"=\", sql.lit(`${namespace}.${key}`))\n .select([\"value\"])\n .executeTakeFirstOrThrow();\n return result.value as string;\n } catch {\n return;\n }\n },\n\n insert(key: string, value: string) {\n return db\n .insertInto(tableName)\n .values({\n id: sql.lit(\n createHash(\"md5\").update(`${namespace}.${key}`).digest(\"base64url\").replace(/=/g, \"\"),\n ),\n key: sql.lit(`${namespace}.${key}`),\n value: sql.lit(value),\n })\n .compile().sql;\n },\n\n update(key: string, value: string) {\n return db\n .updateTable(tableName)\n .set({\n value: sql.lit(value),\n })\n .where(\"key\", \"=\", sql.lit(`${namespace}.${key}`))\n .compile().sql;\n },\n };\n}\n"],"mappings":";;;;;;;;;AAqBA,IAAa,gBAAb,MAAsD;CACpD;CAEA,YAAY,QAAsB;AAChC,QAAKA,eAAgB;;CAGvB,SAAoB;EAClB,MAAM,KAAK,MAAKA,aAAc;AAC9B,SAAO,OAAO,OAAO,aAAa,IAAI,GAAG;;CAG3C,kBAAuC,QAAW,WAAqC;EAErF,MAAM,SAAS,YAAY,sBAAsB,UAAU,GAAG;AAM9D,SAAO,WAAW,QAJmB;GACnC,IAAI,MAAKC,OAAQ;GACjB,UAAU,MAAKD,aAAc;GAC9B,EACyC,OAAO;;CAGnD,MAAM,sBAAwC;AAC5C,MAAI;GACF,MAAM,KAAK,MAAKC,OAAQ;AAExB,WADe,MAAM,GAAG,aAAa,GAAG,sBAAsB,QAAQ,GAAG,CAAC,EAC3D,KAAK,GAA+B,eAAe;UAC5D;AACN,UAAO;;;CAIX,sBAAsB,QAAmB,WAA6B;EACpE,MAAM,UAAU,sBAAsB,MAAKA,OAAQ,EAAE,UAAU;EAC/D,MAAM,SAAS,YAAY,sBAAsB,UAAU,GAAG;EAE9D,MAAM,iCAAiC,eAAqC;GAC1E,IAAI,eAAe,qBAAqB,YAAY,MAAKD,aAAc;AAEvE,OAAI,MAAKA,aAAc,aAAa,SAAS;AAC3C,iBAAa,QAAQ;KAAE,MAAM;KAAU,KAAK;KAA8B,CAAC;AAC3E,iBAAa,KAAK;KAAE,MAAM;KAAU,KAAK;KAA8B,CAAC;;AAG1E,UAAO;;EAIT,MAAM,qBAAqB,YAAkC,OAAkB;GAC7E,MAAM,gBAAgB,MAAuB,SAAkB;IAC7D,MAAM,YAAY,IAAI,IAAI,KAAK,OAAiB;AAEhD,WAAO;KACL,UAAU;AACR,aAAO,UAAU,QAAQE,KAAG;;KAE9B,UAAU;AACR,aAAO,UAAU,QAAQA,KAAG;;KAE/B;;GAGH,MAAMC,WAAyB;IAAE;IAAI,UAAU,MAAKH,aAAc;IAAU;AAC5E,UAAO,WAAW,SAAS,OACzB,QAAQ,IAAI,WAAW,SAAS,aAAa,MAAM,GAAG,EAAE,OAAO,CAChE;;AA+DH,SA5DiB,eAAe;GAC9B;GACA,UAAU,OAAO,eAAe;IAC9B,MAAM,KAAK,MAAKC,OAAQ;AAExB,QAAI,MAAKD,aAAc,aAAa,SAClC,OAAM,IAAI,IAAI,iCAAiC,CAAC,QAAQ,GAAG;AAG7D,UAAM,GAAG,aAAa,CAAC,QAAQ,OAAO,OAAO;KAE3C,MAAM,QAAQ,kBADO,8BAA8B,WAAW,EAChB,GAAG;AACjD,UAAK,MAAM,QAAQ,MACjB,KAAI;AACF,YAAM,KAAK,SAAS;cACb,GAAG;AACV,cAAQ,MAAM,aAAa,KAAK,SAAS,EAAE,EAAE;AAC7C,YAAM;;MAGV;;GAEJ,KAAK,EACH,QAAQ,eAAe;IACrB,MAAMI,QAAkB,EAAE;AAG1B,QAAI,MAAKJ,aAAc,aAAa,SAClC,OAAM,KAAK,kCAAkC;IAK/C,MAAM,WADQ,kBADO,8BAA8B,WAAW,EAChB,MAAKC,OAAQ,CAAC,CACrC,KAAK,SAAS,GAAG,KAAK,SAAS,CAAC,IAAI,GAAG;AAE9D,UAAM,KAAK,GAAG,SAAS;AAEvB,WAAO,MAAM,KAAK,OAAO;MAE5B;GAED,UAAU;IACR,YAAY,YAAY;KACtB,MAAM,IAAI,MAAM,QAAQ,IAAI,iBAAiB;AAC7C,YAAO,IAAI,SAAS,EAAE,GAAG;;IAE3B,2BAA2B,OAAO,aAAa,cAAc;AAC3D,YAAO,CACL;MACE,MAAM;MACN,KACE,gBAAgB,IACZ,QAAQ,OAAO,kBAAkB,UAAU,UAAU,CAAC,GACtD,QAAQ,OAAO,kBAAkB,UAAU,UAAU,CAAC;MAC7D,CACF;;IAEJ;GACF,CAAC;;CAKJ,iBAAiB,WAAmB;AAGlC,SAFgB,sBAAsB,MAAKA,OAAQ,EAAE,UAAU,CAEhD,IAAI,iBAAiB;;;AAIxC,SAAS,sBAAsB,IAAe,WAAmB;CAE/D,MAAM,YAAY;AAElB,QAAO;EACL,MAAM,IAAI,KAA0C;AAClD,OAAI;AAMF,YALe,MAAM,GAClB,WAAW,UAAU,CACrB,MAAM,OAAO,KAAK,IAAI,IAAI,GAAG,UAAU,GAAG,MAAM,CAAC,CACjD,OAAO,CAAC,QAAQ,CAAC,CACjB,yBAAyB,EACd;WACR;AACN;;;EAIJ,OAAO,KAAa,OAAe;AACjC,UAAO,GACJ,WAAW,UAAU,CACrB,OAAO;IACN,IAAI,IAAI,IACN,WAAW,MAAM,CAAC,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC,OAAO,YAAY,CAAC,QAAQ,MAAM,GAAG,CACtF;IACD,KAAK,IAAI,IAAI,GAAG,UAAU,GAAG,MAAM;IACnC,OAAO,IAAI,IAAI,MAAM;IACtB,CAAC,CACD,SAAS,CAAC;;EAGf,OAAO,KAAa,OAAe;AACjC,UAAO,GACJ,YAAY,UAAU,CACtB,IAAI,EACH,OAAO,IAAI,IAAI,MAAM,EACtB,CAAC,CACD,MAAM,OAAO,KAAK,IAAI,IAAI,GAAG,UAAU,GAAG,MAAM,CAAC,CACjD,SAAS,CAAC;;EAEhB"}
|
|
1
|
+
{"version":3,"file":"kysely-adapter.js","names":["#connectionPool","#provider","db","config: KyselyConfig","parts: string[]"],"sources":["../../../src/adapters/kysely/kysely-adapter.ts"],"sourcesContent":["import { sql, type Kysely } from \"kysely\";\nimport type { SQLProvider } from \"../../shared/providers\";\nimport {\n fragnoDatabaseAdapterNameFakeSymbol,\n fragnoDatabaseAdapterVersionFakeSymbol,\n type DatabaseAdapter,\n} from \"../adapters\";\nimport { createMigrator, type Migrator } from \"../../migration-engine/create\";\nimport type { AnySchema } from \"../../schema/create\";\nimport type { CustomOperation, MigrationOperation } from \"../../migration-engine/shared\";\nimport { execute, preprocessOperations } from \"./migration/execute\";\nimport type { AbstractQuery } from \"../../query/query\";\nimport { fromKysely } from \"./kysely-query\";\nimport { createTableNameMapper } from \"./kysely-shared\";\nimport { createHash } from \"node:crypto\";\nimport { SETTINGS_TABLE_NAME } from \"../../shared/settings-schema\";\nimport type { ConnectionPool } from \"../../shared/connection-pool\";\nimport { createKyselyConnectionPool } from \"./kysely-connection-pool\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype KyselyAny = Kysely<any>;\n\nexport interface KyselyConfig {\n db: KyselyAny | (() => KyselyAny | Promise<KyselyAny>);\n provider: SQLProvider;\n}\n\nexport class KyselyAdapter implements DatabaseAdapter {\n #connectionPool: ConnectionPool<KyselyAny>;\n #provider: SQLProvider;\n\n constructor(config: KyselyConfig) {\n this.#connectionPool = createKyselyConnectionPool(config.db);\n this.#provider = config.provider;\n }\n\n get [fragnoDatabaseAdapterNameFakeSymbol](): string {\n return \"kysely\";\n }\n\n get [fragnoDatabaseAdapterVersionFakeSymbol](): number {\n return 0;\n }\n\n async close(): Promise<void> {\n await this.#connectionPool.close();\n }\n\n createQueryEngine<T extends AnySchema>(schema: T, namespace: string): AbstractQuery<T> {\n // Only create mapper if namespace is non-empty\n const mapper = namespace ? createTableNameMapper(namespace) : undefined;\n return fromKysely(schema, this.#connectionPool, this.#provider, mapper);\n }\n\n async isConnectionHealthy(): Promise<boolean> {\n const conn = await this.#connectionPool.connect();\n try {\n const result = await conn.db.executeQuery(sql`SELECT 1 as healthy`.compile(conn.db));\n return (result.rows[0] as Record<string, unknown>)[\"healthy\"] === 1;\n } catch {\n return false;\n } finally {\n await conn.release();\n }\n }\n\n createMigrationEngine(schema: AnySchema, namespace: string): Migrator {\n const mapper = namespace ? createTableNameMapper(namespace) : undefined;\n\n const preprocessMigrationOperations = (operations: MigrationOperation[], db: KyselyAny) => {\n // Preprocess operations using the provided db instance\n const config: KyselyConfig = {\n db,\n provider: this.#provider,\n };\n let preprocessed = preprocessOperations(operations, config);\n\n if (this.#provider === \"mysql\") {\n preprocessed.unshift({ type: \"custom\", sql: \"SET FOREIGN_KEY_CHECKS = 0\" });\n preprocessed.push({ type: \"custom\", sql: \"SET FOREIGN_KEY_CHECKS = 1\" });\n }\n\n return preprocessed;\n };\n\n // Convert operations to executable nodes bound to specific db instance\n const toExecutableNodes = (operations: MigrationOperation[], db: KyselyAny) => {\n const onCustomNode = (node: CustomOperation, db: KyselyAny) => {\n const statement = sql.raw(node[\"sql\"] as string);\n\n return {\n compile() {\n return statement.compile(db);\n },\n execute() {\n return statement.execute(db);\n },\n };\n };\n\n const config: KyselyConfig = { db, provider: this.#provider };\n return operations.flatMap((op) =>\n execute(op, config, (node) => onCustomNode(node, db), mapper),\n );\n };\n\n const migrator = createMigrator({\n schema,\n executor: async (operations) => {\n const conn = await this.#connectionPool.connect();\n try {\n // For SQLite, execute PRAGMA defer_foreign_keys BEFORE transaction\n if (this.#provider === \"sqlite\") {\n await sql.raw(\"PRAGMA defer_foreign_keys = ON\").execute(conn.db);\n }\n\n await conn.db.transaction().execute(async (tx) => {\n // Use the transaction instance for both preprocessing and execution\n const preprocessed = preprocessMigrationOperations(operations, tx);\n const nodes = toExecutableNodes(preprocessed, tx);\n for (const node of nodes) {\n try {\n await node.execute();\n } catch (e) {\n console.error(\"failed at\", node.compile(), e);\n throw e;\n }\n }\n });\n } finally {\n await conn.release();\n }\n },\n sql: {\n toSql: (operations) => {\n const parts: string[] = [];\n\n // Add SQLite PRAGMA at the beginning\n if (this.#provider === \"sqlite\") {\n parts.push(\"PRAGMA defer_foreign_keys = ON;\");\n }\n\n // Use getDatabaseSync for SQL generation (doesn't execute, just builds SQL strings)\n const db = this.#connectionPool.getDatabaseSync();\n const preprocessed = preprocessMigrationOperations(operations, db);\n const nodes = toExecutableNodes(preprocessed, db);\n const compiled = nodes.map((node) => `${node.compile().sql};`);\n\n parts.push(...compiled);\n\n return parts.join(\"\\n\\n\");\n },\n },\n\n settings: {\n getVersion: async () => {\n const conn = await this.#connectionPool.connect();\n try {\n const manager = createSettingsManager(conn.db, namespace);\n const v = await manager.get(`schema_version`);\n return v ? parseInt(v) : 0;\n } finally {\n await conn.release();\n }\n },\n updateSettingsInMigration: async (fromVersion, toVersion) => {\n const conn = await this.#connectionPool.connect();\n try {\n const manager = createSettingsManager(conn.db, namespace);\n return [\n {\n type: \"custom\",\n sql:\n fromVersion === 0\n ? manager.insert(`schema_version`, toVersion.toString())\n : manager.update(`schema_version`, toVersion.toString()),\n },\n ];\n } finally {\n await conn.release();\n }\n },\n },\n });\n\n return migrator;\n }\n\n async getSchemaVersion(namespace: string): Promise<string | undefined> {\n const conn = await this.#connectionPool.connect();\n try {\n const manager = createSettingsManager(conn.db, namespace);\n return await manager.get(`schema_version`);\n } finally {\n await conn.release();\n }\n }\n}\n\nfunction createSettingsManager(db: KyselyAny, namespace: string) {\n // Settings table is never namespaced, but keys include namespace prefix\n const tableName = SETTINGS_TABLE_NAME;\n\n return {\n async get(key: string): Promise<string | undefined> {\n try {\n const result = await db\n .selectFrom(tableName)\n .where(\"key\", \"=\", sql.lit(`${namespace}.${key}`))\n .select([\"value\"])\n .executeTakeFirstOrThrow();\n return result.value as string;\n } catch {\n return;\n }\n },\n\n insert(key: string, value: string) {\n return db\n .insertInto(tableName)\n .values({\n id: sql.lit(\n createHash(\"md5\").update(`${namespace}.${key}`).digest(\"base64url\").replace(/=/g, \"\"),\n ),\n key: sql.lit(`${namespace}.${key}`),\n value: sql.lit(value),\n })\n .compile().sql;\n },\n\n update(key: string, value: string) {\n return db\n .updateTable(tableName)\n .set({\n value: sql.lit(value),\n })\n .where(\"key\", \"=\", sql.lit(`${namespace}.${key}`))\n .compile().sql;\n },\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
//#region src/adapters/kysely/kysely-connection-pool.ts
|
|
2
|
+
/**
|
|
3
|
+
* Creates a Kysely-specific connection pool with proper cleanup.
|
|
4
|
+
* Calls db.destroy() when the pool is closed to properly release database connections.
|
|
5
|
+
*/
|
|
6
|
+
function createKyselyConnectionPool(dbOrFactory) {
|
|
7
|
+
let cachedDb;
|
|
8
|
+
let initPromise;
|
|
9
|
+
const ensureInitialized = async () => {
|
|
10
|
+
if (cachedDb) return cachedDb;
|
|
11
|
+
if (!initPromise) initPromise = (async () => {
|
|
12
|
+
const db = typeof dbOrFactory === "function" ? await dbOrFactory() : dbOrFactory;
|
|
13
|
+
cachedDb = db;
|
|
14
|
+
return db;
|
|
15
|
+
})();
|
|
16
|
+
return initPromise;
|
|
17
|
+
};
|
|
18
|
+
if (typeof dbOrFactory === "function") ensureInitialized();
|
|
19
|
+
else cachedDb = dbOrFactory;
|
|
20
|
+
return {
|
|
21
|
+
async connect() {
|
|
22
|
+
return {
|
|
23
|
+
db: await ensureInitialized(),
|
|
24
|
+
release: async () => {}
|
|
25
|
+
};
|
|
26
|
+
},
|
|
27
|
+
getDatabaseSync() {
|
|
28
|
+
if (!cachedDb) throw new Error("Cannot get database synchronously: database not initialized.");
|
|
29
|
+
return cachedDb;
|
|
30
|
+
},
|
|
31
|
+
async close() {
|
|
32
|
+
if (cachedDb) await cachedDb.destroy();
|
|
33
|
+
cachedDb = void 0;
|
|
34
|
+
initPromise = void 0;
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
//#endregion
|
|
40
|
+
export { createKyselyConnectionPool };
|
|
41
|
+
//# sourceMappingURL=kysely-connection-pool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kysely-connection-pool.js","names":["cachedDb: KyselyAny | undefined","initPromise: Promise<KyselyAny> | undefined"],"sources":["../../../src/adapters/kysely/kysely-connection-pool.ts"],"sourcesContent":["import type { Kysely } from \"kysely\";\nimport type { ConnectionPool } from \"../../shared/connection-pool\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype KyselyAny = Kysely<any>;\n\n/**\n * Creates a Kysely-specific connection pool with proper cleanup.\n * Calls db.destroy() when the pool is closed to properly release database connections.\n */\nexport function createKyselyConnectionPool(\n dbOrFactory: KyselyAny | (() => KyselyAny | Promise<KyselyAny>),\n): ConnectionPool<KyselyAny> {\n let cachedDb: KyselyAny | undefined;\n let initPromise: Promise<KyselyAny> | undefined;\n\n const ensureInitialized = async (): Promise<KyselyAny> => {\n if (cachedDb) {\n return cachedDb;\n }\n\n if (!initPromise) {\n initPromise = (async () => {\n const db =\n typeof dbOrFactory === \"function\"\n ? await (dbOrFactory as () => KyselyAny | Promise<KyselyAny>)()\n : dbOrFactory;\n cachedDb = db;\n return db;\n })();\n }\n\n return initPromise;\n };\n\n // Eagerly start initialization if it's a factory function\n if (typeof dbOrFactory === \"function\") {\n void ensureInitialized();\n } else {\n // Direct instance - cache it immediately\n cachedDb = dbOrFactory;\n }\n\n return {\n async connect() {\n const db = await ensureInitialized();\n\n return {\n db,\n release: async () => {},\n };\n },\n\n getDatabaseSync() {\n if (!cachedDb) {\n throw new Error(\"Cannot get database synchronously: database not initialized.\");\n }\n return cachedDb;\n },\n\n async close() {\n if (cachedDb) {\n // Properly destroy Kysely instance to close all connections\n await cachedDb.destroy();\n }\n cachedDb = undefined;\n initPromise = undefined;\n },\n };\n}\n"],"mappings":";;;;;AAUA,SAAgB,2BACd,aAC2B;CAC3B,IAAIA;CACJ,IAAIC;CAEJ,MAAM,oBAAoB,YAAgC;AACxD,MAAI,SACF,QAAO;AAGT,MAAI,CAAC,YACH,gBAAe,YAAY;GACzB,MAAM,KACJ,OAAO,gBAAgB,aACnB,MAAO,aAAsD,GAC7D;AACN,cAAW;AACX,UAAO;MACL;AAGN,SAAO;;AAIT,KAAI,OAAO,gBAAgB,WACzB,CAAK,mBAAmB;KAGxB,YAAW;AAGb,QAAO;EACL,MAAM,UAAU;AAGd,UAAO;IACL,IAHS,MAAM,mBAAmB;IAIlC,SAAS,YAAY;IACtB;;EAGH,kBAAkB;AAChB,OAAI,CAAC,SACH,OAAM,IAAI,MAAM,+DAA+D;AAEjF,UAAO;;EAGT,MAAM,QAAQ;AACZ,OAAI,SAEF,OAAM,SAAS,SAAS;AAE1B,cAAW;AACX,iBAAc;;EAEjB"}
|
|
@@ -3,9 +3,8 @@ import { buildFindOptions } from "../../query/orm/orm.js";
|
|
|
3
3
|
import { createKyselyQueryBuilder } from "./kysely-query-builder.js";
|
|
4
4
|
|
|
5
5
|
//#region src/adapters/kysely/kysely-query-compiler.ts
|
|
6
|
-
function createKyselyQueryCompiler(schema,
|
|
7
|
-
const
|
|
8
|
-
const queryBuilder = createKyselyQueryBuilder(typeof db === "function" ? db() : db, provider, mapper);
|
|
6
|
+
function createKyselyQueryCompiler(schema, pool, provider, mapper) {
|
|
7
|
+
const queryBuilder = createKyselyQueryBuilder(pool.getDatabaseSync(), provider, mapper);
|
|
9
8
|
function toTable(name) {
|
|
10
9
|
const table = schema.tables[name];
|
|
11
10
|
if (!table) throw new Error(`Invalid table name ${name}.`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kysely-query-compiler.js","names":[],"sources":["../../../src/adapters/kysely/kysely-query-compiler.ts"],"sourcesContent":["import type { CompiledQuery } from \"kysely\";\nimport type { AnySchema, AnyTable } from \"../../schema/create\";\nimport { buildCondition } from \"../../query/condition-builder\";\nimport { buildFindOptions } from \"../../query/orm/orm\";\nimport
|
|
1
|
+
{"version":3,"file":"kysely-query-compiler.js","names":[],"sources":["../../../src/adapters/kysely/kysely-query-compiler.ts"],"sourcesContent":["import type { CompiledQuery, Kysely } from \"kysely\";\nimport type { AnySchema, AnyTable } from \"../../schema/create\";\nimport { buildCondition } from \"../../query/condition-builder\";\nimport { buildFindOptions } from \"../../query/orm/orm\";\nimport { createKyselyQueryBuilder } from \"./kysely-query-builder\";\nimport type { ConditionBuilder, Condition } from \"../../query/condition-builder\";\nimport type { TableNameMapper } from \"./kysely-shared\";\nimport type { ConnectionPool } from \"../../shared/connection-pool\";\nimport type { SQLProvider } from \"../../shared/providers\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype KyselyAny = Kysely<any>;\n\n/**\n * Internal query compiler interface for Kysely\n * Used by the UOW compiler to generate compiled queries\n */\nexport interface KyselyQueryCompiler {\n count: (\n name: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n options?: { where?: (eb: ConditionBuilder<any>) => any },\n ) => CompiledQuery | null;\n findFirst: (name: string, options: any) => CompiledQuery | null; // eslint-disable-line @typescript-eslint/no-explicit-any\n findMany: (name: string, options?: any) => CompiledQuery | null; // eslint-disable-line @typescript-eslint/no-explicit-any\n create: (name: string, values: any) => CompiledQuery; // eslint-disable-line @typescript-eslint/no-explicit-any\n createMany: (name: string, values: any[]) => CompiledQuery; // eslint-disable-line @typescript-eslint/no-explicit-any\n updateMany: (name: string, options: { set: any; where?: any }) => CompiledQuery | null; // eslint-disable-line @typescript-eslint/no-explicit-any\n deleteMany: (name: string, options: { where?: any }) => CompiledQuery | null; // eslint-disable-line @typescript-eslint/no-explicit-any\n}\n\nexport function createKyselyQueryCompiler<T extends AnySchema>(\n schema: T,\n pool: ConnectionPool<KyselyAny>,\n provider: SQLProvider,\n mapper?: TableNameMapper,\n): KyselyQueryCompiler {\n // Get kysely instance for query building (compilation doesn't execute, just builds SQL)\n const kysely = pool.getDatabaseSync();\n const queryBuilder = createKyselyQueryBuilder(kysely, provider, mapper);\n\n function toTable(name: unknown): AnyTable {\n const table = schema.tables[name as string];\n if (!table) {\n throw new Error(`Invalid table name ${name}.`);\n }\n return table;\n }\n\n return {\n count(name, { where } = {}) {\n const table = toTable(name);\n let conditions = where ? buildCondition(table.columns, where) : undefined;\n if (conditions === true) {\n conditions = undefined;\n }\n if (conditions === false) {\n return null;\n }\n\n return queryBuilder.count(table, { where: conditions });\n },\n\n findFirst(name, options) {\n const table = toTable(name);\n // Safe cast: FindFirstOptions is structurally compatible with FindManyOptions\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const compiledOptions = buildFindOptions(table, options as any);\n if (compiledOptions === false) {\n return null;\n }\n\n return queryBuilder.findMany(table, {\n ...compiledOptions,\n limit: 1,\n });\n },\n\n findMany(name, options = {}) {\n const table = toTable(name);\n // Safe cast: FindManyOptions from compiler matches FindManyOptions from buildFindOptions\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const compiledOptions = buildFindOptions(table, options as any);\n if (compiledOptions === false) {\n return null;\n }\n\n return queryBuilder.findMany(table, compiledOptions);\n },\n\n create(name, values) {\n const table = toTable(name);\n return queryBuilder.create(table, values);\n },\n\n createMany(name, values) {\n const table = toTable(name);\n return queryBuilder.createMany(table, values);\n },\n\n updateMany(name, { set, where }) {\n const table = toTable(name);\n let conditions = where ? buildCondition(table.columns, where) : undefined;\n if (conditions === true) {\n conditions = undefined;\n }\n if (conditions === false) {\n return null;\n }\n\n // Safe: conditions is Condition | undefined after filtering out true/false\n return queryBuilder.updateMany(table, {\n set,\n where: conditions as Condition | undefined,\n });\n },\n\n deleteMany(name, { where }) {\n const table = toTable(name);\n let conditions = where ? buildCondition(table.columns, where) : undefined;\n if (conditions === true) {\n conditions = undefined;\n }\n if (conditions === false) {\n return null;\n }\n\n // Safe: conditions is Condition | undefined after filtering out true/false\n return queryBuilder.deleteMany(table, { where: conditions as Condition | undefined });\n },\n };\n}\n"],"mappings":";;;;;AA+BA,SAAgB,0BACd,QACA,MACA,UACA,QACqB;CAGrB,MAAM,eAAe,yBADN,KAAK,iBAAiB,EACiB,UAAU,OAAO;CAEvE,SAAS,QAAQ,MAAyB;EACxC,MAAM,QAAQ,OAAO,OAAO;AAC5B,MAAI,CAAC,MACH,OAAM,IAAI,MAAM,sBAAsB,KAAK,GAAG;AAEhD,SAAO;;AAGT,QAAO;EACL,MAAM,MAAM,EAAE,UAAU,EAAE,EAAE;GAC1B,MAAM,QAAQ,QAAQ,KAAK;GAC3B,IAAI,aAAa,QAAQ,eAAe,MAAM,SAAS,MAAM,GAAG;AAChE,OAAI,eAAe,KACjB,cAAa;AAEf,OAAI,eAAe,MACjB,QAAO;AAGT,UAAO,aAAa,MAAM,OAAO,EAAE,OAAO,YAAY,CAAC;;EAGzD,UAAU,MAAM,SAAS;GACvB,MAAM,QAAQ,QAAQ,KAAK;GAG3B,MAAM,kBAAkB,iBAAiB,OAAO,QAAe;AAC/D,OAAI,oBAAoB,MACtB,QAAO;AAGT,UAAO,aAAa,SAAS,OAAO;IAClC,GAAG;IACH,OAAO;IACR,CAAC;;EAGJ,SAAS,MAAM,UAAU,EAAE,EAAE;GAC3B,MAAM,QAAQ,QAAQ,KAAK;GAG3B,MAAM,kBAAkB,iBAAiB,OAAO,QAAe;AAC/D,OAAI,oBAAoB,MACtB,QAAO;AAGT,UAAO,aAAa,SAAS,OAAO,gBAAgB;;EAGtD,OAAO,MAAM,QAAQ;GACnB,MAAM,QAAQ,QAAQ,KAAK;AAC3B,UAAO,aAAa,OAAO,OAAO,OAAO;;EAG3C,WAAW,MAAM,QAAQ;GACvB,MAAM,QAAQ,QAAQ,KAAK;AAC3B,UAAO,aAAa,WAAW,OAAO,OAAO;;EAG/C,WAAW,MAAM,EAAE,KAAK,SAAS;GAC/B,MAAM,QAAQ,QAAQ,KAAK;GAC3B,IAAI,aAAa,QAAQ,eAAe,MAAM,SAAS,MAAM,GAAG;AAChE,OAAI,eAAe,KACjB,cAAa;AAEf,OAAI,eAAe,MACjB,QAAO;AAIT,UAAO,aAAa,WAAW,OAAO;IACpC;IACA,OAAO;IACR,CAAC;;EAGJ,WAAW,MAAM,EAAE,SAAS;GAC1B,MAAM,QAAQ,QAAQ,KAAK;GAC3B,IAAI,aAAa,QAAQ,eAAe,MAAM,SAAS,MAAM,GAAG;AAChE,OAAI,eAAe,KACjB,cAAa;AAEf,OAAI,eAAe,MACjB,QAAO;AAIT,UAAO,aAAa,WAAW,OAAO,EAAE,OAAO,YAAqC,CAAC;;EAExF"}
|
|
@@ -12,16 +12,15 @@ import { executeKyselyMutationPhase, executeKyselyRetrievalPhase } from "./kysel
|
|
|
12
12
|
* enabling features like SQL snapshot testing.
|
|
13
13
|
*
|
|
14
14
|
* @param schema - The database schema definition
|
|
15
|
-
* @param
|
|
15
|
+
* @param pool - Connection pool for acquiring database connections
|
|
16
|
+
* @param provider - SQL provider (postgresql, mysql, sqlite, etc.)
|
|
16
17
|
* @param mapper - Optional table name mapper for namespace prefixing
|
|
17
18
|
* @returns An AbstractQuery instance for performing database operations
|
|
18
19
|
*
|
|
19
20
|
* @example
|
|
20
21
|
* ```ts
|
|
21
|
-
* const
|
|
22
|
-
*
|
|
23
|
-
* provider: 'postgresql'
|
|
24
|
-
* });
|
|
22
|
+
* const pool = createSimpleConnectionPool(kysely);
|
|
23
|
+
* const queryEngine = fromKysely(mySchema, pool, 'postgresql');
|
|
25
24
|
*
|
|
26
25
|
* const users = await queryEngine.findMany('users', {
|
|
27
26
|
* where: (b) => b('age', '>', 18),
|
|
@@ -29,14 +28,26 @@ import { executeKyselyMutationPhase, executeKyselyRetrievalPhase } from "./kysel
|
|
|
29
28
|
* });
|
|
30
29
|
* ```
|
|
31
30
|
*/
|
|
32
|
-
function fromKysely(schema,
|
|
33
|
-
const { db, provider } = config;
|
|
34
|
-
const kysely = typeof db === "function" ? db() : db;
|
|
35
|
-
const uowCompiler = createKyselyUOWCompiler(schema, config, mapper);
|
|
31
|
+
function fromKysely(schema, pool, provider, mapper) {
|
|
36
32
|
function createUOW(name) {
|
|
33
|
+
const uowCompiler = createKyselyUOWCompiler(schema, pool, provider, mapper);
|
|
37
34
|
const executor = {
|
|
38
|
-
executeRetrievalPhase
|
|
39
|
-
|
|
35
|
+
async executeRetrievalPhase(retrievalBatch) {
|
|
36
|
+
const conn = await pool.connect();
|
|
37
|
+
try {
|
|
38
|
+
return await executeKyselyRetrievalPhase(conn.db, retrievalBatch);
|
|
39
|
+
} finally {
|
|
40
|
+
await conn.release();
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
async executeMutationPhase(mutationBatch) {
|
|
44
|
+
const conn = await pool.connect();
|
|
45
|
+
try {
|
|
46
|
+
return await executeKyselyMutationPhase(conn.db, mutationBatch);
|
|
47
|
+
} finally {
|
|
48
|
+
await conn.release();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
40
51
|
};
|
|
41
52
|
const decoder = (rawResults, ops) => {
|
|
42
53
|
if (rawResults.length !== ops.length) throw new Error("rawResults and ops must have the same length");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kysely-query.js","names":["executor: UOWExecutor<CompiledQuery, unknown>","decoder: UOWDecoder<T>","whereConfig: { indexName?: string; condition?: unknown }","setValues: unknown"],"sources":["../../../src/adapters/kysely/kysely-query.ts"],"sourcesContent":["import type { AbstractQuery } from \"../../query/query\";\nimport type { AnySchema } from \"../../schema/create\";\nimport type { KyselyConfig } from \"./kysely-adapter\";\nimport type { CompiledMutation, UOWDecoder, UOWExecutor } from \"../../query/unit-of-work\";\nimport { decodeResult } from \"../../query/result-transform\";\nimport { createKyselyUOWCompiler } from \"./kysely-uow-compiler\";\nimport { executeKyselyRetrievalPhase, executeKyselyMutationPhase } from \"./kysely-uow-executor\";\nimport { UnitOfWork } from \"../../query/unit-of-work\";\nimport type { CompiledQuery } from \"kysely\";\nimport type { TableNameMapper } from \"./kysely-shared\";\n\n/**\n * Creates a Kysely-based query engine for the given schema.\n *\n * This is the main entry point for creating a database query interface using Kysely.\n * It uses a compiler-based architecture where queries are compiled to SQL and then executed,\n * enabling features like SQL snapshot testing.\n *\n * @param schema - The database schema definition\n * @param config - Kysely configuration containing the database instance and provider\n * @param mapper - Optional table name mapper for namespace prefixing\n * @returns An AbstractQuery instance for performing database operations\n *\n * @example\n * ```ts\n * const queryEngine = fromKysely(mySchema, {\n * db: kysely,\n * provider: 'postgresql'\n * });\n *\n * const users = await queryEngine.findMany('users', {\n * where: (b) => b('age', '>', 18),\n * orderBy: [['name', 'asc']]\n * });\n * ```\n */\nexport function fromKysely<T extends AnySchema>(\n schema: T,\n config: KyselyConfig,\n mapper?: TableNameMapper,\n): AbstractQuery<T> {\n const { db, provider } = config;\n // Resolve the db instance if it's a function\n const kysely = typeof db === \"function\" ? db() : db;\n const uowCompiler = createKyselyUOWCompiler(schema, config, mapper);\n\n function createUOW(name?: string): UnitOfWork<T, []> {\n const executor: UOWExecutor<CompiledQuery, unknown> = {\n executeRetrievalPhase: (retrievalBatch: CompiledQuery[]) =>\n executeKyselyRetrievalPhase(kysely, retrievalBatch),\n executeMutationPhase: (mutationBatch: CompiledMutation<CompiledQuery>[]) =>\n executeKyselyMutationPhase(kysely, mutationBatch),\n };\n\n // Create a decoder function to transform raw results into application format\n const decoder: UOWDecoder<T> = (rawResults, ops) => {\n if (rawResults.length !== ops.length) {\n throw new Error(\"rawResults and ops must have the same length\");\n }\n\n return rawResults.map((rows, index) => {\n const op = ops[index];\n if (!op) {\n throw new Error(\"op must be defined\");\n }\n\n // Handle count operations differently - return the count number directly\n if (op.type === \"count\") {\n const rowArray = rows as Record<string, unknown>[];\n const firstRow = rowArray[0];\n if (!firstRow) {\n return 0;\n }\n const count = Number(firstRow[\"count\"]);\n if (Number.isNaN(count)) {\n throw new Error(`Unexpected result for count, received: ${count}`);\n }\n return count;\n }\n\n // Each result is an array of rows - decode each row\n const rowArray = rows as Record<string, unknown>[];\n return rowArray.map((row) => decodeResult(row, op.table, provider));\n });\n };\n\n return new UnitOfWork(schema, uowCompiler, executor, decoder, name);\n }\n\n return {\n async find(tableName, builderFn) {\n const uow = createUOW();\n uow.find(tableName, builderFn);\n // executeRetrieve returns an array of results (one per find operation)\n // Since we only have one find, unwrap the first result\n const [result]: unknown[][] = await uow.executeRetrieve();\n return result ?? [];\n },\n\n async findFirst(tableName, builderFn) {\n const uow = createUOW();\n if (builderFn) {\n uow.find(tableName, (b) => builderFn(b as never).pageSize(1));\n } else {\n uow.find(tableName, (b) => b.whereIndex(\"primary\").pageSize(1));\n }\n // executeRetrieve runs an array of `find` operation results, which each return an array of rows\n const [result]: unknown[][] = await uow.executeRetrieve();\n return result?.[0] ?? null;\n },\n\n async create(tableName, values) {\n const uow = createUOW();\n uow.create(tableName, values);\n const { success } = await uow.executeMutations();\n if (!success) {\n // This should not happen because we don't `.check()` this call.\n // TODO: Verify what happens when there are unique constraints\n throw new Error(\"Failed to create record\");\n }\n\n const [createdId] = uow.getCreatedIds();\n if (!createdId) {\n throw new Error(\"Failed to get created ID\");\n }\n return createdId;\n },\n\n async createMany(tableName, valuesArray) {\n const uow = createUOW();\n for (const values of valuesArray) {\n uow.create(tableName, values);\n }\n const { success } = await uow.executeMutations();\n if (!success) {\n throw new Error(\"Failed to create records\");\n }\n\n return uow.getCreatedIds();\n },\n\n async update(tableName, id, builderFn) {\n const uow = createUOW();\n uow.update(tableName, id, builderFn as never);\n const { success } = await uow.executeMutations();\n if (!success) {\n throw new Error(\"Failed to update record (version conflict or record not found)\");\n }\n },\n\n async updateMany(tableName, builderFn) {\n // Create a special builder that captures both where and set operations\n let whereConfig: { indexName?: string; condition?: unknown } = {};\n let setValues: unknown;\n\n const specialBuilder = {\n whereIndex(indexName: string, condition?: unknown) {\n whereConfig = { indexName, condition };\n return this;\n },\n set(values: unknown) {\n setValues = values;\n return this;\n },\n };\n\n builderFn(specialBuilder);\n\n if (!whereConfig.indexName) {\n throw new Error(\"whereIndex() must be called in updateMany\");\n }\n if (!setValues) {\n throw new Error(\"set() must be called in updateMany\");\n }\n\n // First, find all matching records\n const findUow = createUOW();\n findUow.find(tableName, (b) => {\n if (whereConfig.condition) {\n return b.whereIndex(whereConfig.indexName as never, whereConfig.condition as never);\n }\n return b.whereIndex(whereConfig.indexName as never);\n });\n const findResults: unknown[][] = await findUow.executeRetrieve();\n const records = findResults[0];\n\n if (!records || records.length === 0) {\n return;\n }\n\n // Now update all found records\n const updateUow = createUOW();\n for (const record of records as never as Array<{ id: unknown }>) {\n updateUow.update(tableName as string, record.id as string, (b) =>\n b.set(setValues as never),\n );\n }\n const { success } = await updateUow.executeMutations();\n if (!success) {\n throw new Error(\"Failed to update records (version conflict)\");\n }\n },\n\n async delete(tableName, id, builderFn) {\n const uow = createUOW();\n uow.delete(tableName, id, builderFn as never);\n const { success } = await uow.executeMutations();\n if (!success) {\n throw new Error(\"Failed to delete record (version conflict or record not found)\");\n }\n },\n\n async deleteMany(tableName, builderFn) {\n // Create a special builder that captures where configuration\n let whereConfig: { indexName?: string; condition?: unknown } = {};\n\n const specialBuilder = {\n whereIndex(indexName: string, condition?: unknown) {\n whereConfig = { indexName, condition };\n return this;\n },\n };\n\n // Safe: Call builderFn to capture the configuration\n builderFn(specialBuilder as never);\n\n if (!whereConfig.indexName) {\n throw new Error(\"whereIndex() must be called in deleteMany\");\n }\n\n // First, find all matching records\n const findUow = createUOW();\n findUow.find(tableName as string, (b) => {\n if (whereConfig.condition) {\n return b.whereIndex(whereConfig.indexName as never, whereConfig.condition as never);\n }\n return b.whereIndex(whereConfig.indexName as never);\n });\n const findResults2 = await findUow.executeRetrieve();\n const records = (findResults2 as unknown as [unknown])[0];\n\n // @ts-expect-error - Type narrowing doesn't work through unknown cast\n if (!records || records.length === 0) {\n return;\n }\n\n // Now delete all found records\n const deleteUow = createUOW();\n for (const record of records as never as Array<{ id: unknown }>) {\n deleteUow.delete(tableName as string, record.id as string);\n }\n const { success } = await deleteUow.executeMutations();\n if (!success) {\n throw new Error(\"Failed to delete records (version conflict)\");\n }\n },\n\n createUnitOfWork(name) {\n return createUOW(name);\n },\n } as AbstractQuery<T>;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"kysely-query.js","names":["executor: UOWExecutor<CompiledQuery, unknown>","decoder: UOWDecoder<T>","whereConfig: { indexName?: string; condition?: unknown }","setValues: unknown"],"sources":["../../../src/adapters/kysely/kysely-query.ts"],"sourcesContent":["import type { AbstractQuery } from \"../../query/query\";\nimport type { AnySchema } from \"../../schema/create\";\nimport type { CompiledMutation, UOWDecoder, UOWExecutor } from \"../../query/unit-of-work\";\nimport { decodeResult } from \"../../query/result-transform\";\nimport { createKyselyUOWCompiler } from \"./kysely-uow-compiler\";\nimport { executeKyselyRetrievalPhase, executeKyselyMutationPhase } from \"./kysely-uow-executor\";\nimport { UnitOfWork } from \"../../query/unit-of-work\";\nimport type { CompiledQuery, Kysely } from \"kysely\";\nimport type { TableNameMapper } from \"./kysely-shared\";\nimport type { ConnectionPool } from \"../../shared/connection-pool\";\nimport type { SQLProvider } from \"../../shared/providers\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype KyselyAny = Kysely<any>;\n\n/**\n * Creates a Kysely-based query engine for the given schema.\n *\n * This is the main entry point for creating a database query interface using Kysely.\n * It uses a compiler-based architecture where queries are compiled to SQL and then executed,\n * enabling features like SQL snapshot testing.\n *\n * @param schema - The database schema definition\n * @param pool - Connection pool for acquiring database connections\n * @param provider - SQL provider (postgresql, mysql, sqlite, etc.)\n * @param mapper - Optional table name mapper for namespace prefixing\n * @returns An AbstractQuery instance for performing database operations\n *\n * @example\n * ```ts\n * const pool = createSimpleConnectionPool(kysely);\n * const queryEngine = fromKysely(mySchema, pool, 'postgresql');\n *\n * const users = await queryEngine.findMany('users', {\n * where: (b) => b('age', '>', 18),\n * orderBy: [['name', 'asc']]\n * });\n * ```\n */\nexport function fromKysely<T extends AnySchema>(\n schema: T,\n pool: ConnectionPool<KyselyAny>,\n provider: SQLProvider,\n mapper?: TableNameMapper,\n): AbstractQuery<T> {\n function createUOW(name?: string): UnitOfWork<T, []> {\n const uowCompiler = createKyselyUOWCompiler(schema, pool, provider, mapper);\n\n const executor: UOWExecutor<CompiledQuery, unknown> = {\n async executeRetrievalPhase(retrievalBatch: CompiledQuery[]) {\n const conn = await pool.connect();\n try {\n return await executeKyselyRetrievalPhase(conn.db, retrievalBatch);\n } finally {\n await conn.release();\n }\n },\n async executeMutationPhase(mutationBatch: CompiledMutation<CompiledQuery>[]) {\n const conn = await pool.connect();\n try {\n return await executeKyselyMutationPhase(conn.db, mutationBatch);\n } finally {\n await conn.release();\n }\n },\n };\n\n // Create a decoder function to transform raw results into application format\n const decoder: UOWDecoder<T> = (rawResults, ops) => {\n if (rawResults.length !== ops.length) {\n throw new Error(\"rawResults and ops must have the same length\");\n }\n\n return rawResults.map((rows, index) => {\n const op = ops[index];\n if (!op) {\n throw new Error(\"op must be defined\");\n }\n\n // Handle count operations differently - return the count number directly\n if (op.type === \"count\") {\n const rowArray = rows as Record<string, unknown>[];\n const firstRow = rowArray[0];\n if (!firstRow) {\n return 0;\n }\n const count = Number(firstRow[\"count\"]);\n if (Number.isNaN(count)) {\n throw new Error(`Unexpected result for count, received: ${count}`);\n }\n return count;\n }\n\n // Each result is an array of rows - decode each row\n const rowArray = rows as Record<string, unknown>[];\n return rowArray.map((row) => decodeResult(row, op.table, provider));\n });\n };\n\n return new UnitOfWork(schema, uowCompiler, executor, decoder, name);\n }\n\n return {\n async find(tableName, builderFn) {\n const uow = createUOW();\n uow.find(tableName, builderFn);\n // executeRetrieve returns an array of results (one per find operation)\n // Since we only have one find, unwrap the first result\n const [result]: unknown[][] = await uow.executeRetrieve();\n return result ?? [];\n },\n\n async findFirst(tableName, builderFn) {\n const uow = createUOW();\n if (builderFn) {\n uow.find(tableName, (b) => builderFn(b as never).pageSize(1));\n } else {\n uow.find(tableName, (b) => b.whereIndex(\"primary\").pageSize(1));\n }\n // executeRetrieve runs an array of `find` operation results, which each return an array of rows\n const [result]: unknown[][] = await uow.executeRetrieve();\n return result?.[0] ?? null;\n },\n\n async create(tableName, values) {\n const uow = createUOW();\n uow.create(tableName, values);\n const { success } = await uow.executeMutations();\n if (!success) {\n // This should not happen because we don't `.check()` this call.\n // TODO: Verify what happens when there are unique constraints\n throw new Error(\"Failed to create record\");\n }\n\n const [createdId] = uow.getCreatedIds();\n if (!createdId) {\n throw new Error(\"Failed to get created ID\");\n }\n return createdId;\n },\n\n async createMany(tableName, valuesArray) {\n const uow = createUOW();\n for (const values of valuesArray) {\n uow.create(tableName, values);\n }\n const { success } = await uow.executeMutations();\n if (!success) {\n throw new Error(\"Failed to create records\");\n }\n\n return uow.getCreatedIds();\n },\n\n async update(tableName, id, builderFn) {\n const uow = createUOW();\n uow.update(tableName, id, builderFn as never);\n const { success } = await uow.executeMutations();\n if (!success) {\n throw new Error(\"Failed to update record (version conflict or record not found)\");\n }\n },\n\n async updateMany(tableName, builderFn) {\n // Create a special builder that captures both where and set operations\n let whereConfig: { indexName?: string; condition?: unknown } = {};\n let setValues: unknown;\n\n const specialBuilder = {\n whereIndex(indexName: string, condition?: unknown) {\n whereConfig = { indexName, condition };\n return this;\n },\n set(values: unknown) {\n setValues = values;\n return this;\n },\n };\n\n builderFn(specialBuilder);\n\n if (!whereConfig.indexName) {\n throw new Error(\"whereIndex() must be called in updateMany\");\n }\n if (!setValues) {\n throw new Error(\"set() must be called in updateMany\");\n }\n\n // First, find all matching records\n const findUow = createUOW();\n findUow.find(tableName, (b) => {\n if (whereConfig.condition) {\n return b.whereIndex(whereConfig.indexName as never, whereConfig.condition as never);\n }\n return b.whereIndex(whereConfig.indexName as never);\n });\n const findResults: unknown[][] = await findUow.executeRetrieve();\n const records = findResults[0];\n\n if (!records || records.length === 0) {\n return;\n }\n\n // Now update all found records\n const updateUow = createUOW();\n for (const record of records as never as Array<{ id: unknown }>) {\n updateUow.update(tableName as string, record.id as string, (b) =>\n b.set(setValues as never),\n );\n }\n const { success } = await updateUow.executeMutations();\n if (!success) {\n throw new Error(\"Failed to update records (version conflict)\");\n }\n },\n\n async delete(tableName, id, builderFn) {\n const uow = createUOW();\n uow.delete(tableName, id, builderFn as never);\n const { success } = await uow.executeMutations();\n if (!success) {\n throw new Error(\"Failed to delete record (version conflict or record not found)\");\n }\n },\n\n async deleteMany(tableName, builderFn) {\n // Create a special builder that captures where configuration\n let whereConfig: { indexName?: string; condition?: unknown } = {};\n\n const specialBuilder = {\n whereIndex(indexName: string, condition?: unknown) {\n whereConfig = { indexName, condition };\n return this;\n },\n };\n\n // Safe: Call builderFn to capture the configuration\n builderFn(specialBuilder as never);\n\n if (!whereConfig.indexName) {\n throw new Error(\"whereIndex() must be called in deleteMany\");\n }\n\n // First, find all matching records\n const findUow = createUOW();\n findUow.find(tableName as string, (b) => {\n if (whereConfig.condition) {\n return b.whereIndex(whereConfig.indexName as never, whereConfig.condition as never);\n }\n return b.whereIndex(whereConfig.indexName as never);\n });\n const findResults2 = await findUow.executeRetrieve();\n const records = (findResults2 as unknown as [unknown])[0];\n\n // @ts-expect-error - Type narrowing doesn't work through unknown cast\n if (!records || records.length === 0) {\n return;\n }\n\n // Now delete all found records\n const deleteUow = createUOW();\n for (const record of records as never as Array<{ id: unknown }>) {\n deleteUow.delete(tableName as string, record.id as string);\n }\n const { success } = await deleteUow.executeMutations();\n if (!success) {\n throw new Error(\"Failed to delete records (version conflict)\");\n }\n },\n\n createUnitOfWork(name) {\n return createUOW(name);\n },\n } as AbstractQuery<T>;\n}\n"],"mappings":"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"}
|
|
@@ -11,14 +11,14 @@ import { createKyselyQueryCompiler } from "./kysely-query-compiler.js";
|
|
|
11
11
|
* that can be executed as a batch/transaction.
|
|
12
12
|
*
|
|
13
13
|
* @param schema - The database schema
|
|
14
|
-
* @param
|
|
14
|
+
* @param pool - Connection pool for acquiring database connections
|
|
15
|
+
* @param provider - SQL provider (postgresql, mysql, sqlite, etc.)
|
|
15
16
|
* @param mapper - Optional table name mapper for namespace prefixing
|
|
16
17
|
* @returns A UOWCompiler instance for Kysely
|
|
17
18
|
*/
|
|
18
|
-
function createKyselyUOWCompiler(schema,
|
|
19
|
-
const queryCompiler = createKyselyQueryCompiler(schema,
|
|
20
|
-
const
|
|
21
|
-
const queryBuilder = createKyselyQueryBuilder(typeof db === "function" ? db() : db, provider, mapper);
|
|
19
|
+
function createKyselyUOWCompiler(schema, pool, provider, mapper) {
|
|
20
|
+
const queryCompiler = createKyselyQueryCompiler(schema, pool, provider, mapper);
|
|
21
|
+
const queryBuilder = createKyselyQueryBuilder(pool.getDatabaseSync(), provider, mapper);
|
|
22
22
|
function toTable(name) {
|
|
23
23
|
const table = schema.tables[name];
|
|
24
24
|
if (!table) throw new Error(`Invalid table name ${name}.`);
|