@fragno-dev/db 0.1.15 → 0.2.0
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 +242 -179
- package/CHANGELOG.md +23 -0
- package/README.md +123 -8
- package/dist/adapters/adapters.d.ts +5 -5
- package/dist/adapters/adapters.d.ts.map +1 -1
- package/dist/adapters/adapters.js.map +1 -1
- package/dist/adapters/drizzle/drizzle-adapter.d.ts +6 -21
- package/dist/adapters/drizzle/drizzle-adapter.d.ts.map +1 -1
- package/dist/adapters/drizzle/drizzle-adapter.js +7 -54
- package/dist/adapters/drizzle/drizzle-adapter.js.map +1 -1
- package/dist/adapters/drizzle/generate.d.ts +3 -0
- package/dist/adapters/drizzle/generate.d.ts.map +1 -1
- package/dist/adapters/drizzle/generate.js +36 -28
- package/dist/adapters/drizzle/generate.js.map +1 -1
- package/dist/adapters/generic-sql/driver-config.d.ts +74 -0
- package/dist/adapters/generic-sql/driver-config.d.ts.map +1 -0
- package/dist/adapters/generic-sql/driver-config.js +94 -0
- package/dist/adapters/generic-sql/driver-config.js.map +1 -0
- package/dist/adapters/generic-sql/generic-sql-adapter.d.ts +43 -0
- package/dist/adapters/generic-sql/generic-sql-adapter.d.ts.map +1 -0
- package/dist/adapters/generic-sql/generic-sql-adapter.js +87 -0
- package/dist/adapters/generic-sql/generic-sql-adapter.js.map +1 -0
- package/dist/adapters/generic-sql/generic-sql-uow-executor.js +67 -0
- package/dist/adapters/generic-sql/generic-sql-uow-executor.js.map +1 -0
- package/dist/adapters/generic-sql/migration/cold-kysely.js +33 -0
- package/dist/adapters/generic-sql/migration/cold-kysely.js.map +1 -0
- package/dist/adapters/generic-sql/migration/dialect/mysql.js +60 -0
- package/dist/adapters/generic-sql/migration/dialect/mysql.js.map +1 -0
- package/dist/adapters/generic-sql/migration/dialect/postgres.js +59 -0
- package/dist/adapters/generic-sql/migration/dialect/postgres.js.map +1 -0
- package/dist/adapters/generic-sql/migration/dialect/sqlite.js +96 -0
- package/dist/adapters/generic-sql/migration/dialect/sqlite.js.map +1 -0
- package/dist/adapters/generic-sql/migration/executor.d.ts +15 -0
- package/dist/adapters/generic-sql/migration/executor.d.ts.map +1 -0
- package/dist/adapters/generic-sql/migration/executor.js +18 -0
- package/dist/adapters/generic-sql/migration/executor.js.map +1 -0
- package/dist/adapters/generic-sql/migration/prepared-migrations.d.ts +66 -0
- package/dist/adapters/generic-sql/migration/prepared-migrations.d.ts.map +1 -0
- package/dist/adapters/generic-sql/migration/prepared-migrations.js +68 -0
- package/dist/adapters/generic-sql/migration/prepared-migrations.js.map +1 -0
- package/dist/adapters/generic-sql/migration/sql-generator.js +212 -0
- package/dist/adapters/generic-sql/migration/sql-generator.js.map +1 -0
- package/dist/adapters/generic-sql/query/create-sql-query-compiler.js +32 -0
- package/dist/adapters/generic-sql/query/create-sql-query-compiler.js.map +1 -0
- package/dist/adapters/generic-sql/query/cursor-utils.js +37 -0
- package/dist/adapters/generic-sql/query/cursor-utils.js.map +1 -0
- package/dist/adapters/generic-sql/query/dialect/mysql.js +33 -0
- package/dist/adapters/generic-sql/query/dialect/mysql.js.map +1 -0
- package/dist/adapters/generic-sql/query/dialect/postgres.js +32 -0
- package/dist/adapters/generic-sql/query/dialect/postgres.js.map +1 -0
- package/dist/adapters/generic-sql/query/dialect/sqlite.js +32 -0
- package/dist/adapters/generic-sql/query/dialect/sqlite.js.map +1 -0
- package/dist/adapters/generic-sql/query/generic-sql-uow-operation-compiler.js +152 -0
- package/dist/adapters/generic-sql/query/generic-sql-uow-operation-compiler.js.map +1 -0
- package/dist/adapters/generic-sql/query/select-builder.js +69 -0
- package/dist/adapters/generic-sql/query/select-builder.js.map +1 -0
- package/dist/adapters/generic-sql/query/sql-query-compiler.js +145 -0
- package/dist/adapters/generic-sql/query/sql-query-compiler.js.map +1 -0
- package/dist/adapters/generic-sql/query/where-builder.js +129 -0
- package/dist/adapters/generic-sql/query/where-builder.js.map +1 -0
- package/dist/adapters/generic-sql/result-interpreter.js +74 -0
- package/dist/adapters/generic-sql/result-interpreter.js.map +1 -0
- package/dist/adapters/generic-sql/uow-decoder.js +105 -0
- package/dist/adapters/generic-sql/uow-decoder.js.map +1 -0
- package/dist/adapters/generic-sql/uow-encoder.js +93 -0
- package/dist/adapters/generic-sql/uow-encoder.js.map +1 -0
- package/dist/adapters/kysely/kysely-adapter.d.ts +5 -18
- package/dist/adapters/kysely/kysely-adapter.d.ts.map +1 -1
- package/dist/adapters/kysely/kysely-adapter.js +6 -165
- package/dist/adapters/kysely/kysely-adapter.js.map +1 -1
- package/dist/adapters/{drizzle/drizzle-query.js → shared/from-unit-of-work-compiler.js} +47 -61
- package/dist/adapters/shared/from-unit-of-work-compiler.js.map +1 -0
- package/dist/adapters/{drizzle/shared.d.ts → shared/table-name-mapper.d.ts} +2 -4
- package/dist/adapters/shared/table-name-mapper.d.ts.map +1 -0
- package/dist/adapters/shared/table-name-mapper.js +43 -0
- package/dist/adapters/shared/table-name-mapper.js.map +1 -0
- package/dist/adapters/shared/uow-operation-compiler.js +105 -0
- package/dist/adapters/shared/uow-operation-compiler.js.map +1 -0
- package/dist/db-fragment-definition-builder.d.ts +53 -19
- package/dist/db-fragment-definition-builder.d.ts.map +1 -1
- package/dist/db-fragment-definition-builder.js +89 -19
- package/dist/db-fragment-definition-builder.js.map +1 -1
- package/dist/fragments/internal-fragment.d.ts +39 -5
- package/dist/fragments/internal-fragment.d.ts.map +1 -1
- package/dist/fragments/internal-fragment.js +82 -10
- package/dist/fragments/internal-fragment.js.map +1 -1
- package/dist/hooks/hooks.d.ts +51 -0
- package/dist/hooks/hooks.d.ts.map +1 -0
- package/dist/hooks/hooks.js +88 -0
- package/dist/hooks/hooks.js.map +1 -0
- package/dist/migration-engine/generation-engine.d.ts +0 -2
- package/dist/migration-engine/generation-engine.d.ts.map +1 -1
- package/dist/migration-engine/generation-engine.js +23 -61
- package/dist/migration-engine/generation-engine.js.map +1 -1
- package/dist/mod.d.ts +34 -10
- package/dist/mod.d.ts.map +1 -1
- package/dist/mod.js +47 -16
- package/dist/mod.js.map +1 -1
- package/dist/node_modules/.pnpm/{rou3@0.7.8 → rou3@0.7.10}/node_modules/rou3/dist/index.js +1 -1
- package/dist/node_modules/.pnpm/rou3@0.7.10/node_modules/rou3/dist/index.js.map +1 -0
- package/dist/packages/fragno/dist/api/fragment-instantiator.js +69 -31
- package/dist/packages/fragno/dist/api/fragment-instantiator.js.map +1 -1
- package/dist/query/column-defaults.js +27 -0
- package/dist/query/column-defaults.js.map +1 -0
- package/dist/query/cursor.d.ts +4 -4
- package/dist/query/cursor.d.ts.map +1 -1
- package/dist/query/cursor.js +8 -6
- package/dist/query/cursor.js.map +1 -1
- package/dist/query/orm/orm.d.ts +1 -1
- package/dist/query/orm/orm.js.map +1 -1
- package/dist/query/serialize/create-sql-serializer.js +30 -0
- package/dist/query/serialize/create-sql-serializer.js.map +1 -0
- package/dist/query/serialize/dialect/mysql-serializer.js +87 -0
- package/dist/query/serialize/dialect/mysql-serializer.js.map +1 -0
- package/dist/query/serialize/dialect/postgres-serializer.js +80 -0
- package/dist/query/serialize/dialect/postgres-serializer.js.map +1 -0
- package/dist/query/serialize/dialect/sqlite-serializer.js +93 -0
- package/dist/query/serialize/dialect/sqlite-serializer.js.map +1 -0
- package/dist/query/serialize/sql-serializer.js +67 -0
- package/dist/query/serialize/sql-serializer.js.map +1 -0
- package/dist/query/{query.d.ts → simple-query-interface.d.ts} +5 -5
- package/dist/query/simple-query-interface.d.ts.map +1 -0
- package/dist/query/{execute-unit-of-work.d.ts → unit-of-work/execute-unit-of-work.d.ts} +13 -3
- package/dist/query/unit-of-work/execute-unit-of-work.d.ts.map +1 -0
- package/dist/query/{execute-unit-of-work.js → unit-of-work/execute-unit-of-work.js} +17 -4
- package/dist/query/unit-of-work/execute-unit-of-work.js.map +1 -0
- package/dist/query/{retry-policy.d.ts → unit-of-work/retry-policy.d.ts} +1 -1
- package/dist/query/unit-of-work/retry-policy.d.ts.map +1 -0
- package/dist/query/{retry-policy.js → unit-of-work/retry-policy.js} +1 -1
- package/dist/query/unit-of-work/retry-policy.js.map +1 -0
- package/dist/query/{unit-of-work.d.ts → unit-of-work/unit-of-work.d.ts} +51 -18
- package/dist/query/unit-of-work/unit-of-work.d.ts.map +1 -0
- package/dist/query/{unit-of-work.js → unit-of-work/unit-of-work.js} +58 -11
- package/dist/query/unit-of-work/unit-of-work.js.map +1 -0
- package/dist/query/value-decoding.js +71 -0
- package/dist/query/value-decoding.js.map +1 -0
- package/dist/query/value-encoding.js +124 -0
- package/dist/query/value-encoding.js.map +1 -0
- package/dist/schema/create.d.ts +3 -0
- package/dist/schema/create.d.ts.map +1 -1
- package/dist/schema/create.js +4 -0
- package/dist/schema/create.js.map +1 -1
- package/dist/schema/type-conversion/create-sql-type-mapper.js +29 -0
- package/dist/schema/type-conversion/create-sql-type-mapper.js.map +1 -0
- package/dist/schema/type-conversion/dialect/mysql.js +57 -0
- package/dist/schema/type-conversion/dialect/mysql.js.map +1 -0
- package/dist/schema/type-conversion/dialect/postgres.js +56 -0
- package/dist/schema/type-conversion/dialect/postgres.js.map +1 -0
- package/dist/schema/type-conversion/dialect/sqlite.js +52 -0
- package/dist/schema/type-conversion/dialect/sqlite.js.map +1 -0
- package/dist/schema/type-conversion/type-mapping.js +63 -0
- package/dist/schema/type-conversion/type-mapping.js.map +1 -0
- package/dist/sql-driver/connection/connection-provider.d.ts +13 -0
- package/dist/sql-driver/connection/connection-provider.d.ts.map +1 -0
- package/dist/sql-driver/connection/connection-provider.js +19 -0
- package/dist/sql-driver/connection/connection-provider.js.map +1 -0
- package/dist/sql-driver/connection/single-connection-provider.js +23 -0
- package/dist/sql-driver/connection/single-connection-provider.js.map +1 -0
- package/dist/sql-driver/dialect-adapter/dialect-adapter.d.ts +7 -0
- package/dist/sql-driver/dialect-adapter/dialect-adapter.d.ts.map +1 -0
- package/dist/sql-driver/dialects/dialects.d.ts +2 -0
- package/dist/sql-driver/dialects/dialects.js +3 -0
- package/dist/sql-driver/dialects/durable-object-dialect.d.ts +72 -0
- package/dist/sql-driver/dialects/durable-object-dialect.d.ts.map +1 -0
- package/dist/sql-driver/dialects/durable-object-dialect.js +130 -0
- package/dist/sql-driver/dialects/durable-object-dialect.js.map +1 -0
- package/dist/sql-driver/driver/runtime-driver.d.ts +23 -0
- package/dist/sql-driver/driver/runtime-driver.d.ts.map +1 -0
- package/dist/sql-driver/driver/runtime-driver.js +56 -0
- package/dist/sql-driver/driver/runtime-driver.js.map +1 -0
- package/dist/sql-driver/query-executor/default-query-executor.js +26 -0
- package/dist/sql-driver/query-executor/default-query-executor.js.map +1 -0
- package/dist/sql-driver/query-executor/plugin.d.ts +17 -0
- package/dist/sql-driver/query-executor/plugin.d.ts.map +1 -0
- package/dist/sql-driver/query-executor/query-executor-base.js +25 -0
- package/dist/sql-driver/query-executor/query-executor-base.js.map +1 -0
- package/dist/sql-driver/query-executor/query-executor.d.ts +36 -0
- package/dist/sql-driver/query-executor/query-executor.d.ts.map +1 -0
- package/dist/sql-driver/sql-driver-adapter.d.ts +29 -0
- package/dist/sql-driver/sql-driver-adapter.d.ts.map +1 -0
- package/dist/sql-driver/sql-driver-adapter.js +68 -0
- package/dist/sql-driver/sql-driver-adapter.js.map +1 -0
- package/dist/sql-driver/sql-driver.d.ts +38 -0
- package/dist/sql-driver/sql-driver.d.ts.map +1 -0
- package/dist/sql-driver/sql-driver.js +1 -0
- package/dist/sql-driver/sql.js +50 -0
- package/dist/sql-driver/sql.js.map +1 -0
- package/dist/with-database.d.ts +6 -2
- package/dist/with-database.d.ts.map +1 -1
- package/dist/with-database.js +1 -1
- package/dist/with-database.js.map +1 -1
- package/package.json +37 -10
- package/src/adapters/adapters.ts +8 -5
- package/src/adapters/drizzle/drizzle-adapter-pglite.test.ts +60 -169
- package/src/adapters/drizzle/{drizzle-adapter-sqlite.test.ts → drizzle-adapter-sqlite3.test.ts} +31 -55
- package/src/adapters/drizzle/drizzle-adapter.ts +15 -107
- package/src/adapters/drizzle/generate.test.ts +2 -2
- package/src/adapters/drizzle/generate.ts +78 -34
- package/src/adapters/drizzle/migrate-drizzle.test.ts +19 -0
- package/src/adapters/drizzle/shared.ts +0 -34
- package/src/adapters/drizzle/test-utils.ts +3 -3
- package/src/adapters/generic-sql/README.md +14 -0
- package/src/adapters/generic-sql/driver-config.ts +144 -0
- package/src/adapters/generic-sql/generic-sql-adapter.test.ts +50 -0
- package/src/adapters/generic-sql/generic-sql-adapter.ts +146 -0
- package/src/adapters/generic-sql/generic-sql-uow-executor.ts +130 -0
- package/src/adapters/generic-sql/migration/cold-kysely.ts +55 -0
- package/src/adapters/{kysely/migration/execute-mysql.test.ts → generic-sql/migration/dialect/mysql.test.ts} +342 -484
- package/src/adapters/generic-sql/migration/dialect/mysql.ts +104 -0
- package/src/adapters/generic-sql/migration/dialect/postgres.test.ts +1008 -0
- package/src/adapters/generic-sql/migration/dialect/postgres.ts +113 -0
- package/src/adapters/{kysely/migration/execute-sqlite.test.ts → generic-sql/migration/dialect/sqlite.test.ts} +307 -510
- package/src/adapters/generic-sql/migration/dialect/sqlite.ts +189 -0
- package/src/adapters/generic-sql/migration/executor.ts +33 -0
- package/src/adapters/generic-sql/migration/prepared-migrations.test.ts +661 -0
- package/src/adapters/generic-sql/migration/prepared-migrations.ts +214 -0
- package/src/adapters/generic-sql/migration/sql-generator.ts +413 -0
- package/src/adapters/generic-sql/query/create-sql-query-compiler.ts +36 -0
- package/src/adapters/generic-sql/query/cursor-utils.ts +56 -0
- package/src/adapters/generic-sql/query/dialect/mysql.ts +34 -0
- package/src/adapters/generic-sql/query/dialect/postgres.ts +32 -0
- package/src/adapters/generic-sql/query/dialect/sqlite.ts +32 -0
- package/src/adapters/generic-sql/query/generic-sql-uow-operation-compiler.test.ts +1568 -0
- package/src/adapters/generic-sql/query/generic-sql-uow-operation-compiler.ts +314 -0
- package/src/adapters/generic-sql/query/select-builder.test.ts +256 -0
- package/src/adapters/generic-sql/query/select-builder.ts +137 -0
- package/src/adapters/generic-sql/query/sql-query-compiler.test.ts +195 -0
- package/src/adapters/generic-sql/query/sql-query-compiler.ts +367 -0
- package/src/adapters/generic-sql/query/where-builder.test.ts +744 -0
- package/src/adapters/generic-sql/query/where-builder.ts +211 -0
- package/src/adapters/generic-sql/result-interpreter.ts +102 -0
- package/src/adapters/generic-sql/test/generic-drizzle-adapter-sqlite3.test.ts +899 -0
- package/src/adapters/generic-sql/uow-decoder.test.ts +399 -0
- package/src/adapters/generic-sql/uow-decoder.ts +152 -0
- package/src/adapters/generic-sql/uow-encoder.test.ts +183 -0
- package/src/adapters/generic-sql/uow-encoder.ts +131 -0
- package/src/adapters/kysely/kysely-adapter-pglite.test.ts +26 -76
- package/src/adapters/kysely/{kysely-adapter-sqlite.test.ts → kysely-adapter-sqlocal.test.ts} +76 -17
- package/src/adapters/kysely/kysely-adapter.ts +10 -250
- package/src/adapters/{drizzle/drizzle-query.ts → shared/from-unit-of-work-compiler.ts} +110 -104
- package/src/adapters/shared/table-name-mapper.ts +50 -0
- package/src/adapters/shared/uow-operation-compiler.ts +211 -0
- package/src/db-fragment-definition-builder.test.ts +2 -2
- package/src/db-fragment-definition-builder.ts +281 -50
- package/src/db-fragment-instantiator.test.ts +78 -2
- package/src/db-fragment-integration.test.ts +14 -16
- package/src/fragments/internal-fragment.test.ts +434 -45
- package/src/fragments/internal-fragment.ts +184 -20
- package/src/hooks/hooks.test.ts +575 -0
- package/src/hooks/hooks.ts +179 -0
- package/src/migration-engine/generation-engine.test.ts +44 -54
- package/src/migration-engine/generation-engine.ts +48 -94
- package/src/mod.ts +117 -29
- package/src/query/column-defaults.ts +49 -0
- package/src/query/cursor.test.ts +31 -6
- package/src/query/cursor.ts +11 -7
- package/src/query/orm/orm.ts +1 -1
- package/src/query/query-type.test.ts +9 -9
- package/src/query/serialize/create-sql-serializer.ts +34 -0
- package/src/query/serialize/dialect/mysql-serializer.ts +142 -0
- package/src/query/serialize/dialect/postgres-serializer.ts +129 -0
- package/src/query/serialize/dialect/sqlite-serializer.test.ts +251 -0
- package/src/query/serialize/dialect/sqlite-serializer.ts +156 -0
- package/src/query/serialize/sql-serializer.ts +143 -0
- package/src/query/{query.ts → simple-query-interface.ts} +2 -2
- package/src/query/{execute-unit-of-work.test.ts → unit-of-work/execute-unit-of-work.test.ts} +16 -16
- package/src/query/{execute-unit-of-work.ts → unit-of-work/execute-unit-of-work.ts} +49 -8
- package/src/query/{unit-of-work-coordinator.test.ts → unit-of-work/unit-of-work-coordinator.test.ts} +41 -43
- package/src/query/{unit-of-work-types.test.ts → unit-of-work/unit-of-work-types.test.ts} +5 -3
- package/src/query/{unit-of-work.test.ts → unit-of-work/unit-of-work.test.ts} +100 -9
- package/src/query/{unit-of-work.ts → unit-of-work/unit-of-work.ts} +135 -32
- package/src/query/{result-transform.test.ts → value-decoding.test.ts} +45 -427
- package/src/query/value-decoding.ts +113 -0
- package/src/query/value-encoding.test.ts +390 -0
- package/src/query/value-encoding.ts +168 -0
- package/src/schema/create.test.ts +5 -1
- package/src/schema/create.ts +5 -0
- package/src/schema/serialize.test.ts +165 -407
- package/src/schema/type-conversion/create-sql-type-mapper.ts +28 -0
- package/src/schema/type-conversion/dialect/mysql.ts +64 -0
- package/src/schema/type-conversion/dialect/postgres.ts +62 -0
- package/src/schema/type-conversion/dialect/sqlite.ts +63 -0
- package/src/schema/type-conversion/type-mapping.test.ts +137 -0
- package/src/schema/type-conversion/type-mapping.ts +153 -0
- package/src/shared/connection-pool.ts +5 -5
- package/src/sql-driver/better-sqlite3.test.ts +126 -0
- package/src/sql-driver/connection/connection-provider.ts +27 -0
- package/src/sql-driver/connection/single-connection-provider.ts +42 -0
- package/src/sql-driver/dialect-adapter/dialect-adapter.ts +9 -0
- package/src/sql-driver/dialect-adapter/sqlite-dialect-adapter.ts +7 -0
- package/src/sql-driver/dialects/dialects.ts +1 -0
- package/src/sql-driver/dialects/durable-object-dialect.ts +260 -0
- package/src/sql-driver/driver/runtime-driver.ts +91 -0
- package/src/sql-driver/query-executor/default-query-executor.ts +38 -0
- package/src/sql-driver/query-executor/plugin.ts +22 -0
- package/src/sql-driver/query-executor/query-executor-base.ts +53 -0
- package/src/sql-driver/query-executor/query-executor.ts +44 -0
- package/src/sql-driver/sql-driver-adapter.ts +96 -0
- package/src/sql-driver/sql-driver.ts +53 -0
- package/src/sql-driver/sql.ts +57 -0
- package/src/sql-driver/sqlocal.test.ts +117 -0
- package/src/with-database.ts +35 -23
- package/tsdown.config.ts +7 -2
- package/dist/adapters/drizzle/drizzle-connection-pool.js +0 -40
- package/dist/adapters/drizzle/drizzle-connection-pool.js.map +0 -1
- package/dist/adapters/drizzle/drizzle-query.d.ts +0 -23
- package/dist/adapters/drizzle/drizzle-query.d.ts.map +0 -1
- package/dist/adapters/drizzle/drizzle-query.js.map +0 -1
- package/dist/adapters/drizzle/drizzle-uow-compiler.d.ts +0 -10
- package/dist/adapters/drizzle/drizzle-uow-compiler.d.ts.map +0 -1
- package/dist/adapters/drizzle/drizzle-uow-compiler.js +0 -334
- package/dist/adapters/drizzle/drizzle-uow-compiler.js.map +0 -1
- package/dist/adapters/drizzle/drizzle-uow-decoder.js +0 -123
- package/dist/adapters/drizzle/drizzle-uow-decoder.js.map +0 -1
- package/dist/adapters/drizzle/drizzle-uow-executor.js +0 -160
- package/dist/adapters/drizzle/drizzle-uow-executor.js.map +0 -1
- package/dist/adapters/drizzle/join-column-utils.js +0 -28
- package/dist/adapters/drizzle/join-column-utils.js.map +0 -1
- package/dist/adapters/drizzle/shared.d.ts.map +0 -1
- package/dist/adapters/drizzle/shared.js +0 -35
- package/dist/adapters/drizzle/shared.js.map +0 -1
- package/dist/adapters/kysely/kysely-connection-pool.js +0 -41
- package/dist/adapters/kysely/kysely-connection-pool.js.map +0 -1
- package/dist/adapters/kysely/kysely-query-builder.js +0 -321
- package/dist/adapters/kysely/kysely-query-builder.js.map +0 -1
- package/dist/adapters/kysely/kysely-query-compiler.js +0 -67
- package/dist/adapters/kysely/kysely-query-compiler.js.map +0 -1
- package/dist/adapters/kysely/kysely-query.d.ts +0 -23
- package/dist/adapters/kysely/kysely-query.d.ts.map +0 -1
- package/dist/adapters/kysely/kysely-query.js +0 -230
- package/dist/adapters/kysely/kysely-query.js.map +0 -1
- package/dist/adapters/kysely/kysely-shared.d.ts +0 -14
- package/dist/adapters/kysely/kysely-shared.d.ts.map +0 -1
- package/dist/adapters/kysely/kysely-shared.js +0 -33
- package/dist/adapters/kysely/kysely-shared.js.map +0 -1
- package/dist/adapters/kysely/kysely-uow-compiler.js +0 -193
- package/dist/adapters/kysely/kysely-uow-compiler.js.map +0 -1
- package/dist/adapters/kysely/kysely-uow-executor.js +0 -93
- package/dist/adapters/kysely/kysely-uow-executor.js.map +0 -1
- package/dist/adapters/kysely/migration/execute-base.js +0 -128
- package/dist/adapters/kysely/migration/execute-base.js.map +0 -1
- package/dist/adapters/kysely/migration/execute-factory.js +0 -34
- package/dist/adapters/kysely/migration/execute-factory.js.map +0 -1
- package/dist/adapters/kysely/migration/execute-mssql.js +0 -112
- package/dist/adapters/kysely/migration/execute-mssql.js.map +0 -1
- package/dist/adapters/kysely/migration/execute-mysql.js +0 -93
- package/dist/adapters/kysely/migration/execute-mysql.js.map +0 -1
- package/dist/adapters/kysely/migration/execute-postgres.js +0 -104
- package/dist/adapters/kysely/migration/execute-postgres.js.map +0 -1
- package/dist/adapters/kysely/migration/execute-sqlite.js +0 -123
- package/dist/adapters/kysely/migration/execute-sqlite.js.map +0 -1
- package/dist/adapters/kysely/migration/execute.js +0 -34
- package/dist/adapters/kysely/migration/execute.js.map +0 -1
- package/dist/migration-engine/create.d.ts +0 -37
- package/dist/migration-engine/create.d.ts.map +0 -1
- package/dist/migration-engine/create.js +0 -58
- package/dist/migration-engine/create.js.map +0 -1
- package/dist/migration-engine/shared.d.ts +0 -112
- package/dist/migration-engine/shared.d.ts.map +0 -1
- package/dist/node_modules/.pnpm/rou3@0.7.8/node_modules/rou3/dist/index.js.map +0 -1
- package/dist/query/execute-unit-of-work.d.ts.map +0 -1
- package/dist/query/execute-unit-of-work.js.map +0 -1
- package/dist/query/query.d.ts.map +0 -1
- package/dist/query/result-transform.js +0 -170
- package/dist/query/result-transform.js.map +0 -1
- package/dist/query/retry-policy.d.ts.map +0 -1
- package/dist/query/retry-policy.js.map +0 -1
- package/dist/query/unit-of-work.d.ts.map +0 -1
- package/dist/query/unit-of-work.js.map +0 -1
- package/dist/schema/serialize.js +0 -111
- package/dist/schema/serialize.js.map +0 -1
- package/src/adapters/drizzle/drizzle-adapter.test.ts +0 -122
- package/src/adapters/drizzle/drizzle-connection-pool.ts +0 -66
- package/src/adapters/drizzle/drizzle-query.test.ts +0 -499
- package/src/adapters/drizzle/drizzle-uow-compiler-mysql.test.ts +0 -1442
- package/src/adapters/drizzle/drizzle-uow-compiler-sqlite.test.ts +0 -1414
- package/src/adapters/drizzle/drizzle-uow-compiler.test.ts +0 -1400
- package/src/adapters/drizzle/drizzle-uow-compiler.ts +0 -677
- package/src/adapters/drizzle/drizzle-uow-decoder.ts +0 -228
- package/src/adapters/drizzle/drizzle-uow-executor.ts +0 -309
- package/src/adapters/drizzle/join-column-utils.test.ts +0 -79
- package/src/adapters/drizzle/join-column-utils.ts +0 -39
- package/src/adapters/kysely/kysely-connection-pool.ts +0 -70
- package/src/adapters/kysely/kysely-query-builder.test.ts +0 -1344
- package/src/adapters/kysely/kysely-query-builder.ts +0 -666
- package/src/adapters/kysely/kysely-query-compiler.ts +0 -127
- package/src/adapters/kysely/kysely-query.test.ts +0 -498
- package/src/adapters/kysely/kysely-query.ts +0 -399
- package/src/adapters/kysely/kysely-shared.ts +0 -57
- package/src/adapters/kysely/kysely-uow-compiler.test.ts +0 -986
- package/src/adapters/kysely/kysely-uow-compiler.ts +0 -350
- package/src/adapters/kysely/kysely-uow-executor.ts +0 -164
- package/src/adapters/kysely/kysely-uow-joins.test.ts +0 -794
- package/src/adapters/kysely/migration/execute-base.ts +0 -256
- package/src/adapters/kysely/migration/execute-factory.ts +0 -53
- package/src/adapters/kysely/migration/execute-mssql.ts +0 -250
- package/src/adapters/kysely/migration/execute-mysql.ts +0 -211
- package/src/adapters/kysely/migration/execute-postgres.test.ts +0 -2657
- package/src/adapters/kysely/migration/execute-postgres.ts +0 -234
- package/src/adapters/kysely/migration/execute-sqlite.ts +0 -247
- package/src/adapters/kysely/migration/execute.ts +0 -50
- package/src/adapters/kysely/migration/kysely-migrator.test.ts +0 -261
- package/src/query/result-transform.ts +0 -274
- package/src/schema/serialize.ts +0 -407
- /package/dist/query/{query.js → simple-query-interface.js} +0 -0
- /package/src/query/{retry-policy.test.ts → unit-of-work/retry-policy.test.ts} +0 -0
- /package/src/query/{retry-policy.ts → unit-of-work/retry-policy.ts} +0 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { sql } from "kysely";
|
|
2
|
+
|
|
3
|
+
//#region src/sql-driver/sql.ts
|
|
4
|
+
/**
|
|
5
|
+
* Wrapper around Kysely's RawBuilder that provides a compile() method with a dialect parameter.
|
|
6
|
+
*/
|
|
7
|
+
var RawBuilder = class {
|
|
8
|
+
#kyselyBuilder;
|
|
9
|
+
constructor(kyselyBuilder) {
|
|
10
|
+
this.#kyselyBuilder = kyselyBuilder;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Compiles the SQL query using the provided Kysely dialect.
|
|
14
|
+
* Creates a minimal query executor with the dialect's adapter and query compiler.
|
|
15
|
+
*
|
|
16
|
+
* @param dialect - Kysely dialect (e.g., SqliteDialect, PostgresDialect, MysqlDialect)
|
|
17
|
+
* @returns Compiled query with SQL string and parameters
|
|
18
|
+
*/
|
|
19
|
+
compile(dialect) {
|
|
20
|
+
const queryCompiler = dialect.createQueryCompiler();
|
|
21
|
+
return this.#kyselyBuilder.compile({ getExecutor() {
|
|
22
|
+
return {
|
|
23
|
+
transformQuery(node, _queryId) {
|
|
24
|
+
return node;
|
|
25
|
+
},
|
|
26
|
+
compileQuery(node, queryId) {
|
|
27
|
+
return queryCompiler.compileQuery(node, queryId);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
} });
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Tagged template function for building SQL queries with parameters.
|
|
35
|
+
* Wraps Kysely's sql function to provide a compile() method without arguments.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```ts
|
|
39
|
+
* const userId = 123;
|
|
40
|
+
* const query = sql`SELECT * FROM users WHERE id = ${userId}`;
|
|
41
|
+
* const compiled = query.compile();
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
function sql$1(strings, ...values) {
|
|
45
|
+
return new RawBuilder(sql(strings, ...values));
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
//#endregion
|
|
49
|
+
export { sql$1 as sql };
|
|
50
|
+
//# sourceMappingURL=sql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql.js","names":["#kyselyBuilder","sql","kyselySql"],"sources":["../../src/sql-driver/sql.ts"],"sourcesContent":["import type { CompiledQuery, Dialect } from \"./sql-driver\";\nimport {\n sql as kyselySql,\n type QueryExecutor,\n type CompiledQuery as KyselyCompiledQuery,\n} from \"kysely\";\n\n/**\n * Wrapper around Kysely's RawBuilder that provides a compile() method with a dialect parameter.\n */\nexport class RawBuilder {\n #kyselyBuilder: ReturnType<typeof kyselySql>;\n\n constructor(kyselyBuilder: ReturnType<typeof kyselySql>) {\n this.#kyselyBuilder = kyselyBuilder;\n }\n\n /**\n * Compiles the SQL query using the provided Kysely dialect.\n * Creates a minimal query executor with the dialect's adapter and query compiler.\n *\n * @param dialect - Kysely dialect (e.g., SqliteDialect, PostgresDialect, MysqlDialect)\n * @returns Compiled query with SQL string and parameters\n */\n compile(dialect: Dialect): CompiledQuery {\n const queryCompiler = dialect.createQueryCompiler();\n\n return this.#kyselyBuilder.compile({\n getExecutor(): QueryExecutor {\n return {\n transformQuery(node, _queryId) {\n return node;\n },\n compileQuery(node, queryId) {\n return queryCompiler.compileQuery(node, queryId) as KyselyCompiledQuery;\n },\n } as QueryExecutor;\n },\n });\n }\n}\n\n/**\n * Tagged template function for building SQL queries with parameters.\n * Wraps Kysely's sql function to provide a compile() method without arguments.\n *\n * @example\n * ```ts\n * const userId = 123;\n * const query = sql`SELECT * FROM users WHERE id = ${userId}`;\n * const compiled = query.compile();\n * ```\n */\nexport function sql(strings: TemplateStringsArray, ...values: unknown[]): RawBuilder {\n const kyselyBuilder = kyselySql(strings, ...values);\n return new RawBuilder(kyselyBuilder);\n}\n"],"mappings":";;;;;;AAUA,IAAa,aAAb,MAAwB;CACtB;CAEA,YAAY,eAA6C;AACvD,QAAKA,gBAAiB;;;;;;;;;CAUxB,QAAQ,SAAiC;EACvC,MAAM,gBAAgB,QAAQ,qBAAqB;AAEnD,SAAO,MAAKA,cAAe,QAAQ,EACjC,cAA6B;AAC3B,UAAO;IACL,eAAe,MAAM,UAAU;AAC7B,YAAO;;IAET,aAAa,MAAM,SAAS;AAC1B,YAAO,cAAc,aAAa,MAAM,QAAQ;;IAEnD;KAEJ,CAAC;;;;;;;;;;;;;;AAeN,SAAgBC,MAAI,SAA+B,GAAG,QAA+B;AAEnF,QAAO,IAAI,WADWC,IAAU,SAAS,GAAG,OAAO,CACf"}
|
package/dist/with-database.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { AnySchema } from "./schema/create.js";
|
|
2
2
|
import { DatabaseFragmentDefinitionBuilder, DatabaseHandlerContext, DatabaseServiceContext, ImplicitDatabaseDependencies } from "./db-fragment-definition-builder.js";
|
|
3
|
-
import {
|
|
3
|
+
import { InternalFragmentInstance } from "./fragments/internal-fragment.js";
|
|
4
|
+
import { HooksMap } from "./hooks/hooks.js";
|
|
5
|
+
import { AnyFragnoInstantiatedFragment, FragmentDefinitionBuilder, FragnoPublicConfig, RequestThisContext } from "@fragno-dev/core";
|
|
4
6
|
|
|
5
7
|
//#region src/with-database.d.ts
|
|
6
8
|
|
|
@@ -22,7 +24,9 @@ import { FragmentDefinitionBuilder, FragnoPublicConfig, RequestThisContext } fro
|
|
|
22
24
|
* .build();
|
|
23
25
|
* ```
|
|
24
26
|
*/
|
|
25
|
-
declare function withDatabase<TSchema extends AnySchema>(schema: TSchema, namespace?: string): <TConfig, TDeps, TBaseServices, TServices, TServiceDeps, TPrivateServices, TServiceThisContext extends RequestThisContext, THandlerThisContext extends RequestThisContext, TRequestStorage
|
|
27
|
+
declare function withDatabase<TSchema extends AnySchema>(schema: TSchema, namespace?: string): <TConfig, TDeps, TBaseServices, TServices, TServiceDeps, TPrivateServices, TServiceThisContext extends RequestThisContext, THandlerThisContext extends RequestThisContext, TRequestStorage, TLinkedFragments extends Record<string, AnyFragnoInstantiatedFragment>>(builder: FragmentDefinitionBuilder<TConfig, FragnoPublicConfig, TDeps, TBaseServices, TServices, TServiceDeps, TPrivateServices, TServiceThisContext, THandlerThisContext, TRequestStorage, TLinkedFragments>) => DatabaseFragmentDefinitionBuilder<TSchema, TConfig, TDeps & ImplicitDatabaseDependencies<TSchema>, TBaseServices, TServices, TServiceDeps, TPrivateServices, HooksMap, DatabaseServiceContext<HooksMap>, DatabaseHandlerContext, TLinkedFragments & {
|
|
28
|
+
_fragno_internal: InternalFragmentInstance;
|
|
29
|
+
}>;
|
|
26
30
|
//#endregion
|
|
27
31
|
export { withDatabase };
|
|
28
32
|
//# sourceMappingURL=with-database.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"with-database.d.ts","names":[],"sources":["../src/with-database.ts"],"sourcesContent":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"with-database.d.ts","names":[],"sources":["../src/with-database.ts"],"sourcesContent":[],"mappings":";;;;;;;;;AAoCA;;;;;;;;;;;;;;;;;AA0BI,iBA1BY,YA0BZ,CAAA,gBA1ByC,SA0BzC,CAAA,CAAA,MAAA,EAzBM,OAyBN,EAAA,SAAA,CAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,EAAA,KAAA,EAAA,aAAA,EAAA,SAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,4BAhB0B,kBAgB1B,EAAA,4BAf0B,kBAe1B,EAAA,eAAA,EAAA,yBAbuB,MAavB,CAAA,MAAA,EAbsC,6BAatC,CAAA,CAAA,CAAA,OAAA,EAXO,yBAWP,CAVA,OAUA,EATA,kBASA,EARA,KAQA,EAPA,aAOA,EANA,SAMA,EALA,YAKA,EAJA,gBAIA,EAHA,mBAGA,EAFA,mBAEA,EADA,eACA,EAAA,gBAAA,CAAA,EAAA,GAEC,iCAFD,CAGF,OAHE,EAIF,OAJE,EAKF,KALE,GAKM,4BALN,CAKmC,OALnC,CAAA,EAMF,aANE,EAOF,SAPE,EAQF,YARE,EASF,gBATE,EAUF,QAVE,EAWF,sBAXE,CAWqB,QAXrB,CAAA,EAYF,sBAZE,EAaF,gBAbE,GAAA;EAXO,gBAAA,EAwB8B,wBAxB9B;CAcT,CAAA"}
|
package/dist/with-database.js
CHANGED
|
@@ -23,7 +23,7 @@ import { internalFragmentDef } from "./fragments/internal-fragment.js";
|
|
|
23
23
|
*/
|
|
24
24
|
function withDatabase(schema, namespace) {
|
|
25
25
|
return (builder) => {
|
|
26
|
-
return new DatabaseFragmentDefinitionBuilder(builder.
|
|
26
|
+
return new DatabaseFragmentDefinitionBuilder(builder.withLinkedFragment("_fragno_internal", ({ config, options }) => {
|
|
27
27
|
return instantiate(internalFragmentDef).withConfig(config).withOptions(options).build();
|
|
28
28
|
}), schema, namespace);
|
|
29
29
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"with-database.js","names":[],"sources":["../src/with-database.ts"],"sourcesContent":["import type { AnySchema } from \"./schema/create\";\nimport type {
|
|
1
|
+
{"version":3,"file":"with-database.js","names":[],"sources":["../src/with-database.ts"],"sourcesContent":["import type { AnySchema } from \"./schema/create\";\nimport type {\n RequestThisContext,\n FragnoPublicConfig,\n AnyFragnoInstantiatedFragment,\n} from \"@fragno-dev/core\";\nimport { FragmentDefinitionBuilder, instantiate } from \"@fragno-dev/core\";\nimport {\n DatabaseFragmentDefinitionBuilder,\n type DatabaseServiceContext,\n type DatabaseHandlerContext,\n type ImplicitDatabaseDependencies,\n type FragnoPublicConfigWithDatabase,\n type DatabaseRequestStorage,\n} from \"./db-fragment-definition-builder\";\nimport { internalFragmentDef, type InternalFragmentInstance } from \"./fragments/internal-fragment\";\nimport type { HooksMap } from \"./hooks/hooks\";\n\n/**\n * Helper to add database support to a fragment builder.\n * Automatically links the internal fragment and adds ImplicitDatabaseDependencies to the TDeps type.\n *\n * @example\n * ```typescript\n * // With .extend() - recommended\n * const def = defineFragment(\"my-frag\")\n * .extend(withDatabase(mySchema))\n * .withDependencies(...)\n * .build();\n *\n * // Or as a function wrapper\n * const def = withDatabase(mySchema)(defineFragment(\"my-frag\"))\n * .withDependencies(...)\n * .build();\n * ```\n */\nexport function withDatabase<TSchema extends AnySchema>(\n schema: TSchema,\n namespace?: string,\n): <\n TConfig,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDeps,\n TPrivateServices,\n TServiceThisContext extends RequestThisContext,\n THandlerThisContext extends RequestThisContext,\n TRequestStorage,\n TLinkedFragments extends Record<string, AnyFragnoInstantiatedFragment>,\n>(\n builder: FragmentDefinitionBuilder<\n TConfig,\n FragnoPublicConfig,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDeps,\n TPrivateServices,\n TServiceThisContext,\n THandlerThisContext,\n TRequestStorage,\n TLinkedFragments\n >,\n) => DatabaseFragmentDefinitionBuilder<\n TSchema,\n TConfig,\n TDeps & ImplicitDatabaseDependencies<TSchema>,\n TBaseServices,\n TServices,\n TServiceDeps,\n TPrivateServices,\n HooksMap,\n DatabaseServiceContext<HooksMap>,\n DatabaseHandlerContext,\n TLinkedFragments & { _fragno_internal: InternalFragmentInstance }\n> {\n return <\n TConfig,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDeps,\n TPrivateServices,\n TServiceThisContext extends RequestThisContext,\n THandlerThisContext extends RequestThisContext,\n TRequestStorage,\n TLinkedFragments extends Record<string, AnyFragnoInstantiatedFragment>,\n >(\n builder: FragmentDefinitionBuilder<\n TConfig,\n FragnoPublicConfig,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDeps,\n TPrivateServices,\n TServiceThisContext,\n THandlerThisContext,\n TRequestStorage,\n TLinkedFragments\n >,\n ) => {\n const builderWithInternal = builder.withLinkedFragment(\n \"_fragno_internal\",\n ({ config, options }) => {\n // Cast is safe: by the time this callback is invoked during fragment instantiation,\n // the options will be FragnoPublicConfigWithDatabase (enforced by DatabaseFragmentDefinitionBuilder)\n return instantiate(internalFragmentDef)\n .withConfig(config as {})\n .withOptions(options as FragnoPublicConfigWithDatabase)\n .build();\n },\n );\n\n // Cast is safe: we're creating a DatabaseFragmentDefinitionBuilder which internally uses\n // FragnoPublicConfigWithDatabase, but the input builder uses FragnoPublicConfig.\n // The database builder's build() method will enforce FragnoPublicConfigWithDatabase at the end.\n // We also add ImplicitDatabaseDependencies to TDeps so they're available in service constructors.\n // Note: We discard TRequestStorage here because database fragments manage their own storage (DatabaseRequestStorage).\n // We set TServiceThisContext to DatabaseServiceContext (restricted) and THandlerThisContext to DatabaseHandlerContext (full).\n return new DatabaseFragmentDefinitionBuilder<\n TSchema,\n TConfig,\n TDeps & ImplicitDatabaseDependencies<TSchema>,\n TBaseServices,\n TServices,\n TServiceDeps,\n TPrivateServices,\n {}, // Start with empty hooks, provideHooks() will update this\n DatabaseServiceContext<{}>,\n DatabaseHandlerContext,\n TLinkedFragments & { _fragno_internal: InternalFragmentInstance }\n >(\n builderWithInternal as unknown as FragmentDefinitionBuilder<\n TConfig,\n FragnoPublicConfigWithDatabase,\n TDeps & ImplicitDatabaseDependencies<TSchema>,\n TBaseServices,\n TServices,\n TServiceDeps,\n TPrivateServices,\n DatabaseServiceContext<{}>,\n DatabaseHandlerContext,\n DatabaseRequestStorage,\n TLinkedFragments & { _fragno_internal: InternalFragmentInstance }\n >,\n schema,\n namespace,\n );\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAoCA,SAAgB,aACd,QACA,WAsCA;AACA,SAYE,YAaG;AAmBH,SAAO,IAAI,kCAlBiB,QAAQ,mBAClC,qBACC,EAAE,QAAQ,cAAc;AAGvB,UAAO,YAAY,oBAAoB,CACpC,WAAW,OAAa,CACxB,YAAY,QAA0C,CACtD,OAAO;IAEb,EAkCC,QACA,UACD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fragno-dev/db",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
@@ -18,10 +18,30 @@
|
|
|
18
18
|
"types": "./dist/schema/create.d.ts",
|
|
19
19
|
"default": "./dist/schema/create.js"
|
|
20
20
|
},
|
|
21
|
+
"./drivers": {
|
|
22
|
+
"development": "./src/adapters/generic-sql/driver-config.ts",
|
|
23
|
+
"types": "./dist/adapters/generic-sql/driver-config.d.ts",
|
|
24
|
+
"default": "./dist/adapters/generic-sql/driver-config.js"
|
|
25
|
+
},
|
|
26
|
+
"./sql-driver": {
|
|
27
|
+
"development": "./src/sql-driver/sql-driver.ts",
|
|
28
|
+
"types": "./dist/sql-driver/sql-driver.d.ts",
|
|
29
|
+
"default": "./dist/sql-driver/sql-driver.js"
|
|
30
|
+
},
|
|
31
|
+
"./dialects": {
|
|
32
|
+
"development": "./src/sql-driver/dialects/dialects.ts",
|
|
33
|
+
"types": "./dist/sql-driver/dialects/dialects.d.ts",
|
|
34
|
+
"default": "./dist/sql-driver/dialects/dialects.js"
|
|
35
|
+
},
|
|
36
|
+
"./dialects/durable-object": {
|
|
37
|
+
"development": "./src/sql-driver/dialects/durable-object-dialect.ts",
|
|
38
|
+
"types": "./dist/sql-driver/dialects/durable-object-dialect.d.ts",
|
|
39
|
+
"default": "./dist/sql-driver/dialects/durable-object-dialect.js"
|
|
40
|
+
},
|
|
21
41
|
"./query": {
|
|
22
|
-
"development": "./src/query/query.ts",
|
|
23
|
-
"types": "./dist/query/query.d.ts",
|
|
24
|
-
"default": "./dist/query/query.js"
|
|
42
|
+
"development": "./src/query/simple-query-interface.ts",
|
|
43
|
+
"types": "./dist/query/simple-query-interface.d.ts",
|
|
44
|
+
"default": "./dist/query/simple-query-interface.js"
|
|
25
45
|
},
|
|
26
46
|
"./adapters": {
|
|
27
47
|
"development": "./src/adapters/adapters.ts",
|
|
@@ -43,10 +63,15 @@
|
|
|
43
63
|
"types": "./dist/adapters/drizzle/generate.d.ts",
|
|
44
64
|
"default": "./dist/adapters/drizzle/generate.js"
|
|
45
65
|
},
|
|
66
|
+
"./adapters/generic-sql": {
|
|
67
|
+
"development": "./src/adapters/generic-sql/generic-sql-adapter.ts",
|
|
68
|
+
"types": "./dist/adapters/generic-sql/generic-sql-adapter.d.ts",
|
|
69
|
+
"default": "./dist/adapters/generic-sql/generic-sql-adapter.js"
|
|
70
|
+
},
|
|
46
71
|
"./unit-of-work": {
|
|
47
|
-
"development": "./src/query/unit-of-work.ts",
|
|
48
|
-
"types": "./dist/query/unit-of-work.d.ts",
|
|
49
|
-
"default": "./dist/query/unit-of-work.js"
|
|
72
|
+
"development": "./src/query/unit-of-work/unit-of-work.ts",
|
|
73
|
+
"types": "./dist/query/unit-of-work/unit-of-work.d.ts",
|
|
74
|
+
"default": "./dist/query/unit-of-work/unit-of-work.js"
|
|
50
75
|
},
|
|
51
76
|
"./cursor": {
|
|
52
77
|
"development": "./src/query/cursor.ts",
|
|
@@ -72,16 +97,18 @@
|
|
|
72
97
|
"devDependencies": {
|
|
73
98
|
"@electric-sql/pglite": "^0.3.10",
|
|
74
99
|
"@libsql/client": "^0.15.15",
|
|
100
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
75
101
|
"@types/node": "^22",
|
|
76
102
|
"@vitest/coverage-istanbul": "^3.2.4",
|
|
103
|
+
"better-sqlite3": "^12.5.0",
|
|
77
104
|
"drizzle-kit": "^0.31.5",
|
|
78
105
|
"drizzle-orm": "^0.44.6",
|
|
79
106
|
"kysely-pglite": "^0.6.1",
|
|
80
107
|
"mysql2": "^3.11.5",
|
|
108
|
+
"sqlocal": "^0.15.2",
|
|
81
109
|
"vitest": "^3.2.4",
|
|
82
110
|
"zod": "^4.1.12",
|
|
83
|
-
"
|
|
84
|
-
"@fragno-dev/core": "0.1.9",
|
|
111
|
+
"@fragno-dev/core": "0.1.11",
|
|
85
112
|
"@fragno-private/typescript-config": "0.0.1",
|
|
86
113
|
"@fragno-private/vitest-config": "0.0.0"
|
|
87
114
|
},
|
|
@@ -93,7 +120,7 @@
|
|
|
93
120
|
"homepage": "https://fragno.dev",
|
|
94
121
|
"license": "MIT",
|
|
95
122
|
"dependencies": {
|
|
96
|
-
"@paralleldrive/cuid2": "^2.
|
|
123
|
+
"@paralleldrive/cuid2": "^2.3.1",
|
|
97
124
|
"kysely": "^0.28.7"
|
|
98
125
|
},
|
|
99
126
|
"peerDependencies": {
|
package/src/adapters/adapters.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { AbstractQuery } from "../query/query";
|
|
1
|
+
import type { SimpleQueryInterface } from "../query/simple-query-interface";
|
|
3
2
|
import type { SchemaGenerator } from "../schema-generator/schema-generator";
|
|
4
3
|
import type { AnySchema } from "../schema/create";
|
|
5
4
|
import type { RequestContextStorage } from "@fragno-dev/core/internal/request-context-storage";
|
|
6
|
-
import type { IUnitOfWork } from "../query/unit-of-work";
|
|
5
|
+
import type { IUnitOfWork } from "../query/unit-of-work/unit-of-work";
|
|
6
|
+
import type { PreparedMigrations } from "./generic-sql/migration/prepared-migrations";
|
|
7
7
|
|
|
8
8
|
export const fragnoDatabaseAdapterNameFakeSymbol = "$fragno-database-adapter-name" as const;
|
|
9
9
|
export const fragnoDatabaseAdapterVersionFakeSymbol = "$fragno-database-adapter-version" as const;
|
|
@@ -42,9 +42,12 @@ export interface DatabaseAdapter<TUOWConfig = void> {
|
|
|
42
42
|
createQueryEngine: <const T extends AnySchema>(
|
|
43
43
|
schema: T,
|
|
44
44
|
namespace: string,
|
|
45
|
-
) =>
|
|
45
|
+
) => SimpleQueryInterface<T, TUOWConfig>;
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
prepareMigrations?: <const T extends AnySchema>(
|
|
48
|
+
schema: T,
|
|
49
|
+
namespace: string,
|
|
50
|
+
) => PreparedMigrations;
|
|
48
51
|
|
|
49
52
|
/**
|
|
50
53
|
* Generate a combined schema file from one or more fragments.
|
|
@@ -1,19 +1,17 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { PGlite } from "@electric-sql/pglite";
|
|
2
|
+
import { KyselyPGlite } from "kysely-pglite";
|
|
2
3
|
import { DrizzleAdapter } from "./drizzle-adapter";
|
|
3
4
|
import { beforeAll, describe, expect, expectTypeOf, it } from "vitest";
|
|
4
5
|
import { column, idColumn, referenceColumn, schema } from "../../schema/create";
|
|
5
|
-
import type { DBType } from "./shared";
|
|
6
|
-
import { createRequire } from "node:module";
|
|
7
6
|
import { Cursor } from "../../query/cursor";
|
|
8
|
-
import
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
-
// Import drizzle-kit for migrations
|
|
12
|
-
const require = createRequire(import.meta.url);
|
|
13
|
-
const { generateDrizzleJson, generateMigration } =
|
|
14
|
-
require("drizzle-kit/api") as typeof import("drizzle-kit/api");
|
|
7
|
+
import { PGLiteDriverConfig } from "../generic-sql/driver-config";
|
|
8
|
+
import type { CompiledQuery } from "../../sql-driver/sql-driver";
|
|
9
|
+
import { internalSchema } from "../../fragments/internal-fragment";
|
|
15
10
|
|
|
16
11
|
describe("DrizzleAdapter PGLite", () => {
|
|
12
|
+
let pgliteDatabase: PGlite;
|
|
13
|
+
let adapter: DrizzleAdapter;
|
|
14
|
+
|
|
17
15
|
const testSchema = schema((s) => {
|
|
18
16
|
return s
|
|
19
17
|
.addTable("users", (t) => {
|
|
@@ -75,43 +73,54 @@ describe("DrizzleAdapter PGLite", () => {
|
|
|
75
73
|
});
|
|
76
74
|
});
|
|
77
75
|
|
|
78
|
-
|
|
79
|
-
|
|
76
|
+
const schema2 = schema((s) => {
|
|
77
|
+
return s
|
|
78
|
+
.addTable("products", (t) => {
|
|
79
|
+
return t
|
|
80
|
+
.addColumn("id", idColumn())
|
|
81
|
+
.addColumn("name", column("string"))
|
|
82
|
+
.addColumn("price", column("integer"))
|
|
83
|
+
.createIndex("name_idx", ["name"]);
|
|
84
|
+
})
|
|
85
|
+
.addTable("orders", (t) => {
|
|
86
|
+
return t
|
|
87
|
+
.addColumn("id", idColumn())
|
|
88
|
+
.addColumn("product_id", referenceColumn())
|
|
89
|
+
.addColumn("quantity", column("integer"))
|
|
90
|
+
.addColumn("user_id", referenceColumn())
|
|
91
|
+
.createIndex("orders_user_idx", ["user_id"])
|
|
92
|
+
.createIndex("orders_product_idx", ["product_id"]);
|
|
93
|
+
});
|
|
94
|
+
});
|
|
80
95
|
|
|
81
96
|
beforeAll(async () => {
|
|
82
|
-
|
|
83
|
-
const { schemaModule, cleanup } = await writeAndLoadSchema(
|
|
84
|
-
"drizzle-adapter-pglite",
|
|
85
|
-
testSchema,
|
|
86
|
-
"postgresql",
|
|
87
|
-
"namespace",
|
|
88
|
-
);
|
|
97
|
+
pgliteDatabase = new PGlite();
|
|
89
98
|
|
|
90
|
-
|
|
91
|
-
db = drizzle({
|
|
92
|
-
schema: schemaModule,
|
|
93
|
-
}) as unknown as DBType;
|
|
99
|
+
const { dialect } = new KyselyPGlite(pgliteDatabase);
|
|
94
100
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
);
|
|
101
|
+
adapter = new DrizzleAdapter({
|
|
102
|
+
dialect,
|
|
103
|
+
driverConfig: new PGLiteDriverConfig(),
|
|
104
|
+
});
|
|
100
105
|
|
|
101
|
-
//
|
|
102
|
-
|
|
103
|
-
|
|
106
|
+
// Create settings table first (needed for version tracking)
|
|
107
|
+
{
|
|
108
|
+
const migrations = adapter.prepareMigrations(internalSchema, "");
|
|
109
|
+
await migrations.executeWithDriver(adapter.driver, 0);
|
|
104
110
|
}
|
|
105
111
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
}
|
|
112
|
+
{
|
|
113
|
+
const migrations = adapter.prepareMigrations(testSchema, "namespace");
|
|
114
|
+
await migrations.executeWithDriver(adapter.driver, 0);
|
|
115
|
+
}
|
|
110
116
|
|
|
111
|
-
|
|
117
|
+
{
|
|
118
|
+
const migrations = adapter.prepareMigrations(schema2, "namespace2");
|
|
119
|
+
await migrations.executeWithDriver(adapter.driver, 0);
|
|
120
|
+
}
|
|
112
121
|
|
|
113
122
|
return async () => {
|
|
114
|
-
await
|
|
123
|
+
await adapter.close();
|
|
115
124
|
};
|
|
116
125
|
}, 12000);
|
|
117
126
|
|
|
@@ -277,7 +286,7 @@ describe("DrizzleAdapter PGLite", () => {
|
|
|
277
286
|
|
|
278
287
|
it("should support joins", async () => {
|
|
279
288
|
const queryEngine = adapter.createQueryEngine(testSchema, "namespace");
|
|
280
|
-
const queries:
|
|
289
|
+
const queries: CompiledQuery[] = [];
|
|
281
290
|
|
|
282
291
|
const createUow = queryEngine.createUnitOfWork("create-users");
|
|
283
292
|
createUow.create("users", { name: "Email User", age: 20 });
|
|
@@ -312,23 +321,23 @@ describe("DrizzleAdapter PGLite", () => {
|
|
|
312
321
|
|
|
313
322
|
const [query] = queries;
|
|
314
323
|
expect(query.sql).toMatchInlineSnapshot(
|
|
315
|
-
`"select "
|
|
324
|
+
`"select "user"."name" as "user:name", "user"."id" as "user:id", "user"."age" as "user:age", "user"."_internalId" as "user:_internalId", "user"."_version" as "user:_version", "emails_namespace"."id" as "id", "emails_namespace"."user_id" as "user_id", "emails_namespace"."email" as "email", "emails_namespace"."is_primary" as "is_primary", "emails_namespace"."_internalId" as "_internalId", "emails_namespace"."_version" as "_version" from "emails_namespace" left join "users_namespace" as "user" on "emails_namespace"."user_id" = "user"."_internalId""`,
|
|
316
325
|
);
|
|
317
326
|
|
|
318
327
|
expect(email).toMatchObject({
|
|
319
328
|
id: expect.objectContaining({
|
|
320
329
|
externalId: expect.stringMatching(/^[a-z0-9]{20,}$/),
|
|
321
|
-
internalId: expect.any(
|
|
330
|
+
internalId: expect.any(BigInt),
|
|
322
331
|
}),
|
|
323
332
|
user_id: expect.objectContaining({
|
|
324
|
-
internalId: expect.any(
|
|
333
|
+
internalId: expect.any(BigInt),
|
|
325
334
|
}),
|
|
326
335
|
email: "test@example.com",
|
|
327
336
|
is_primary: true,
|
|
328
337
|
user: {
|
|
329
338
|
id: expect.objectContaining({
|
|
330
339
|
externalId: expect.stringMatching(/^[a-z0-9]{20,}$/),
|
|
331
|
-
internalId: expect.any(
|
|
340
|
+
internalId: expect.any(BigInt),
|
|
332
341
|
}),
|
|
333
342
|
name: existingUser.name,
|
|
334
343
|
age: existingUser.age,
|
|
@@ -390,7 +399,7 @@ describe("DrizzleAdapter PGLite", () => {
|
|
|
390
399
|
|
|
391
400
|
it("should support complex nested joins (comments -> post -> author)", async () => {
|
|
392
401
|
const queryEngine = adapter.createQueryEngine(testSchema, "namespace");
|
|
393
|
-
const queries:
|
|
402
|
+
const queries: CompiledQuery[] = [];
|
|
394
403
|
|
|
395
404
|
// Create a user (author)
|
|
396
405
|
const createAuthorUow = queryEngine.createUnitOfWork("create-author");
|
|
@@ -463,7 +472,7 @@ describe("DrizzleAdapter PGLite", () => {
|
|
|
463
472
|
expect(comment).toMatchObject({
|
|
464
473
|
id: expect.objectContaining({
|
|
465
474
|
externalId: expect.stringMatching(/^[a-z0-9]{20,}$/),
|
|
466
|
-
internalId: expect.any(
|
|
475
|
+
internalId: expect.any(BigInt),
|
|
467
476
|
}),
|
|
468
477
|
text: "Great post!",
|
|
469
478
|
// Post join (first level)
|
|
@@ -493,127 +502,8 @@ describe("DrizzleAdapter PGLite", () => {
|
|
|
493
502
|
|
|
494
503
|
const [query] = queries;
|
|
495
504
|
expect(query.sql).toMatchInlineSnapshot(
|
|
496
|
-
`"select "
|
|
497
|
-
);
|
|
498
|
-
});
|
|
499
|
-
|
|
500
|
-
it("should support joins with convenience aliases when relations are also aliased", async () => {
|
|
501
|
-
// This test demonstrates the solution: include BOTH table aliases AND relations aliases
|
|
502
|
-
// in the same schema object. This works around Drizzle's relation resolution bug.
|
|
503
|
-
//
|
|
504
|
-
// The bug: When Drizzle processes a relational query with `.join()`, it looks up
|
|
505
|
-
// tableConfig.relations[relationKey]. If the tableConfig comes from an alias that
|
|
506
|
-
// doesn't have matching relations, it returns undefined and crashes.
|
|
507
|
-
//
|
|
508
|
-
// The fix: For each table alias (e.g., `user`), also add a relations alias
|
|
509
|
-
// (e.g., `userRelations`) pointing to the same relations object.
|
|
510
|
-
|
|
511
|
-
const authSchema = schema((s) => {
|
|
512
|
-
return s
|
|
513
|
-
.addTable("user", (t) => {
|
|
514
|
-
return t
|
|
515
|
-
.addColumn("id", idColumn())
|
|
516
|
-
.addColumn("email", column("string"))
|
|
517
|
-
.addColumn("passwordHash", column("string"));
|
|
518
|
-
})
|
|
519
|
-
.addTable("session", (t) => {
|
|
520
|
-
return t
|
|
521
|
-
.addColumn("id", idColumn())
|
|
522
|
-
.addColumn("userId", referenceColumn())
|
|
523
|
-
.addColumn("expiresAt", column("timestamp"));
|
|
524
|
-
})
|
|
525
|
-
.addReference("sessionOwner", {
|
|
526
|
-
from: { table: "session", column: "userId" },
|
|
527
|
-
to: { table: "user", column: "id" },
|
|
528
|
-
type: "one",
|
|
529
|
-
});
|
|
530
|
-
});
|
|
531
|
-
|
|
532
|
-
// Generate schema with BOTH table aliases AND relations aliases
|
|
533
|
-
const { schemaModule, cleanup } = await writeAndLoadSchema(
|
|
534
|
-
"drizzle-adapter-with-relations-aliases",
|
|
535
|
-
authSchema,
|
|
536
|
-
"postgresql",
|
|
537
|
-
"test-namespace",
|
|
505
|
+
`"select "post"."id" as "post:id", "post"."title" as "post:title", "post"."content" as "post:content", "post"."_internalId" as "post:_internalId", "post"."_version" as "post:_version", "post_author"."id" as "post:author:id", "post_author"."name" as "post:author:name", "post_author"."age" as "post:author:age", "post_author"."_internalId" as "post:author:_internalId", "post_author"."_version" as "post:author:_version", "commenter"."id" as "commenter:id", "commenter"."name" as "commenter:name", "commenter"."_internalId" as "commenter:_internalId", "commenter"."_version" as "commenter:_version", "comments_namespace"."id" as "id", "comments_namespace"."post_id" as "post_id", "comments_namespace"."user_id" as "user_id", "comments_namespace"."text" as "text", "comments_namespace"."_internalId" as "_internalId", "comments_namespace"."_version" as "_version" from "comments_namespace" left join "posts_namespace" as "post" on "comments_namespace"."post_id" = "post"."_internalId" left join "users_namespace" as "post_author" on "post"."user_id" = "post_author"."_internalId" left join "users_namespace" as "commenter" on "comments_namespace"."user_id" = "commenter"."_internalId""`,
|
|
538
506
|
);
|
|
539
|
-
|
|
540
|
-
// The schema now includes:
|
|
541
|
-
// - user_test_namespace + user_test_namespaceRelations (physical)
|
|
542
|
-
// - user + userRelations (aliases that point to the same objects)
|
|
543
|
-
const schemaWithAliases = {
|
|
544
|
-
...schemaModule.test_namespace_schema,
|
|
545
|
-
};
|
|
546
|
-
|
|
547
|
-
// Create Drizzle instance
|
|
548
|
-
const db = drizzle({
|
|
549
|
-
schema: schemaWithAliases,
|
|
550
|
-
}) as unknown as DBType;
|
|
551
|
-
|
|
552
|
-
// Generate and run migrations
|
|
553
|
-
const require = createRequire(import.meta.url);
|
|
554
|
-
const { generateDrizzleJson, generateMigration } =
|
|
555
|
-
require("drizzle-kit/api") as typeof import("drizzle-kit/api");
|
|
556
|
-
|
|
557
|
-
const migrationStatements = await generateMigration(
|
|
558
|
-
generateDrizzleJson({}),
|
|
559
|
-
generateDrizzleJson(schemaModule),
|
|
560
|
-
);
|
|
561
|
-
|
|
562
|
-
for (const statement of migrationStatements) {
|
|
563
|
-
await db.execute(statement);
|
|
564
|
-
}
|
|
565
|
-
|
|
566
|
-
const adapter = new DrizzleAdapter({
|
|
567
|
-
db: async () => db,
|
|
568
|
-
provider: "postgresql",
|
|
569
|
-
});
|
|
570
|
-
|
|
571
|
-
await adapter.isConnectionHealthy();
|
|
572
|
-
const queryEngine = adapter.createQueryEngine(authSchema, "test-namespace");
|
|
573
|
-
|
|
574
|
-
// Create a user
|
|
575
|
-
const createUserUow = queryEngine.createUnitOfWork("create-user");
|
|
576
|
-
createUserUow.create("user", {
|
|
577
|
-
email: "test@example.com",
|
|
578
|
-
passwordHash: "hash",
|
|
579
|
-
});
|
|
580
|
-
await createUserUow.executeMutations();
|
|
581
|
-
|
|
582
|
-
// Create a session
|
|
583
|
-
const [[user]] = await queryEngine.createUnitOfWork("get-user").find("user").executeRetrieve();
|
|
584
|
-
|
|
585
|
-
const createSessionUow = queryEngine.createUnitOfWork("create-session");
|
|
586
|
-
createSessionUow.create("session", {
|
|
587
|
-
userId: user.id,
|
|
588
|
-
expiresAt: new Date("2025-12-31"),
|
|
589
|
-
});
|
|
590
|
-
await createSessionUow.executeMutations();
|
|
591
|
-
|
|
592
|
-
// Get session
|
|
593
|
-
const [[session]] = await queryEngine
|
|
594
|
-
.createUnitOfWork("get-session")
|
|
595
|
-
.find("session")
|
|
596
|
-
.executeRetrieve();
|
|
597
|
-
|
|
598
|
-
// Find session with join - this works now!
|
|
599
|
-
// The key is that when Drizzle looks up the session's relations,
|
|
600
|
-
// it finds BOTH `sessionOwner` (from session_test_namespaceRelations)
|
|
601
|
-
// AND the same relations via `sessionRelations` (the alias)
|
|
602
|
-
const [[sessionWithUser]] = await queryEngine
|
|
603
|
-
.createUnitOfWork("find-session-with-join")
|
|
604
|
-
.find("session", (b) =>
|
|
605
|
-
b
|
|
606
|
-
.whereIndex("primary", (eb) => eb("id", "=", session.id.valueOf()))
|
|
607
|
-
.join((j) => j.sessionOwner((b) => b.select(["id", "email"]))),
|
|
608
|
-
)
|
|
609
|
-
.executeRetrieve();
|
|
610
|
-
|
|
611
|
-
// Verify the join worked
|
|
612
|
-
expect(sessionWithUser).toBeDefined();
|
|
613
|
-
expect(sessionWithUser.sessionOwner).toBeDefined();
|
|
614
|
-
expect(sessionWithUser.sessionOwner?.email).toBe("test@example.com");
|
|
615
|
-
|
|
616
|
-
await cleanup();
|
|
617
507
|
});
|
|
618
508
|
|
|
619
509
|
it("should handle timestamps and timezones correctly", async () => {
|
|
@@ -673,7 +563,7 @@ describe("DrizzleAdapter PGLite", () => {
|
|
|
673
563
|
|
|
674
564
|
it("should create user and post in same transaction using returned ID", async () => {
|
|
675
565
|
const queryEngine = adapter.createQueryEngine(testSchema, "namespace");
|
|
676
|
-
const queries:
|
|
566
|
+
const queries: CompiledQuery[] = [];
|
|
677
567
|
|
|
678
568
|
// Create UOW and create both user and post in same transaction
|
|
679
569
|
const uow = queryEngine.createUnitOfWork("create-user-and-post", {
|
|
@@ -723,15 +613,16 @@ describe("DrizzleAdapter PGLite", () => {
|
|
|
723
613
|
|
|
724
614
|
const [insertUserQuery, insertPostQuery] = queries;
|
|
725
615
|
expect(insertUserQuery.sql).toMatchInlineSnapshot(
|
|
726
|
-
`"insert into "users_namespace" ("id", "name", "age"
|
|
616
|
+
`"insert into "users_namespace" ("id", "name", "age") values ($1, $2, $3) returning "users_namespace"."id" as "id", "users_namespace"."name" as "name", "users_namespace"."age" as "age", "users_namespace"."_internalId" as "_internalId", "users_namespace"."_version" as "_version""`,
|
|
727
617
|
);
|
|
728
|
-
expect(insertUserQuery.
|
|
618
|
+
expect(insertUserQuery.parameters).toEqual([userId.externalId, "UOW Test User", 35]);
|
|
729
619
|
expect(insertPostQuery.sql).toMatchInlineSnapshot(
|
|
730
|
-
`"insert into "posts_namespace" ("id", "user_id", "title", "content"
|
|
620
|
+
`"insert into "posts_namespace" ("id", "user_id", "title", "content") values ($1, (select "_internalId" from "users_namespace" where "id" = $2 limit $3), $4, $5) returning "posts_namespace"."id" as "id", "posts_namespace"."user_id" as "user_id", "posts_namespace"."title" as "title", "posts_namespace"."content" as "content", "posts_namespace"."created_at" as "created_at", "posts_namespace"."_internalId" as "_internalId", "posts_namespace"."_version" as "_version""`,
|
|
731
621
|
);
|
|
732
|
-
expect(insertPostQuery.
|
|
622
|
+
expect(insertPostQuery.parameters).toEqual([
|
|
733
623
|
postId.externalId,
|
|
734
624
|
userId.externalId,
|
|
625
|
+
1,
|
|
735
626
|
"UOW Test Post",
|
|
736
627
|
"This post was created in the same transaction as the user",
|
|
737
628
|
]);
|