@fragno-dev/db 0.1.14 → 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 -139
- package/CHANGELOG.md +47 -0
- package/README.md +123 -8
- package/dist/adapters/adapters.d.ts +19 -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 -19
- package/dist/adapters/drizzle/drizzle-adapter.d.ts.map +1 -1
- package/dist/adapters/drizzle/drizzle-adapter.js +7 -47
- package/dist/adapters/drizzle/drizzle-adapter.js.map +1 -1
- package/dist/adapters/drizzle/generate.d.ts +7 -1
- package/dist/adapters/drizzle/generate.d.ts.map +1 -1
- package/dist/adapters/drizzle/generate.js +46 -45
- 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 -16
- package/dist/adapters/kysely/kysely-adapter.d.ts.map +1 -1
- package/dist/adapters/kysely/kysely-adapter.js +6 -159
- package/dist/adapters/kysely/kysely-adapter.js.map +1 -1
- package/dist/adapters/{drizzle/drizzle-query.js → shared/from-unit-of-work-compiler.js} +48 -62
- package/dist/adapters/shared/from-unit-of-work-compiler.js.map +1 -0
- package/dist/adapters/{kysely/kysely-shared.d.ts → shared/table-name-mapper.d.ts} +3 -2
- 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 +186 -0
- package/dist/db-fragment-definition-builder.d.ts.map +1 -0
- package/dist/db-fragment-definition-builder.js +207 -0
- package/dist/db-fragment-definition-builder.js.map +1 -0
- package/dist/fragments/internal-fragment.d.ts +53 -0
- package/dist/fragments/internal-fragment.d.ts.map +1 -0
- package/dist/fragments/internal-fragment.js +111 -0
- package/dist/fragments/internal-fragment.js.map +1 -0
- 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 +38 -56
- package/dist/migration-engine/generation-engine.js.map +1 -1
- package/dist/mod.d.ts +35 -23
- package/dist/mod.d.ts.map +1 -1
- package/dist/mod.js +48 -45
- package/dist/mod.js.map +1 -1
- package/dist/node_modules/.pnpm/rou3@0.7.10/node_modules/rou3/dist/index.js +165 -0
- package/dist/node_modules/.pnpm/rou3@0.7.10/node_modules/rou3/dist/index.js.map +1 -0
- package/dist/packages/fragno/dist/api/bind-services.js +20 -0
- package/dist/packages/fragno/dist/api/bind-services.js.map +1 -0
- package/dist/packages/fragno/dist/api/error.js +48 -0
- package/dist/packages/fragno/dist/api/error.js.map +1 -0
- package/dist/packages/fragno/dist/api/fragment-definition-builder.js +320 -0
- package/dist/packages/fragno/dist/api/fragment-definition-builder.js.map +1 -0
- package/dist/packages/fragno/dist/api/fragment-instantiator.js +525 -0
- package/dist/packages/fragno/dist/api/fragment-instantiator.js.map +1 -0
- package/dist/packages/fragno/dist/api/fragno-response.js +73 -0
- package/dist/packages/fragno/dist/api/fragno-response.js.map +1 -0
- package/dist/packages/fragno/dist/api/internal/response-stream.js +81 -0
- package/dist/packages/fragno/dist/api/internal/response-stream.js.map +1 -0
- package/dist/packages/fragno/dist/api/internal/route.js +10 -0
- package/dist/packages/fragno/dist/api/internal/route.js.map +1 -0
- package/dist/packages/fragno/dist/api/mutable-request-state.js +97 -0
- package/dist/packages/fragno/dist/api/mutable-request-state.js.map +1 -0
- package/dist/packages/fragno/dist/api/request-context-storage.js +43 -0
- package/dist/packages/fragno/dist/api/request-context-storage.js.map +1 -0
- package/dist/packages/fragno/dist/api/request-input-context.js +118 -0
- package/dist/packages/fragno/dist/api/request-input-context.js.map +1 -0
- package/dist/packages/fragno/dist/api/request-middleware.js +83 -0
- package/dist/packages/fragno/dist/api/request-middleware.js.map +1 -0
- package/dist/packages/fragno/dist/api/request-output-context.js +119 -0
- package/dist/packages/fragno/dist/api/request-output-context.js.map +1 -0
- package/dist/packages/fragno/dist/api/route.js +17 -0
- package/dist/packages/fragno/dist/api/route.js.map +1 -0
- package/dist/packages/fragno/dist/internal/symbols.js +10 -0
- package/dist/packages/fragno/dist/internal/symbols.js.map +1 -0
- package/dist/query/column-defaults.js +27 -0
- package/dist/query/column-defaults.js.map +1 -0
- package/dist/query/cursor.d.ts +14 -6
- package/dist/query/cursor.d.ts.map +1 -1
- package/dist/query/cursor.js +16 -7
- 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} +6 -6
- package/dist/query/simple-query-interface.d.ts.map +1 -0
- package/dist/query/unit-of-work/execute-unit-of-work.d.ts +133 -0
- package/dist/query/unit-of-work/execute-unit-of-work.d.ts.map +1 -0
- package/dist/query/unit-of-work/execute-unit-of-work.js +197 -0
- package/dist/query/unit-of-work/execute-unit-of-work.js.map +1 -0
- package/dist/query/unit-of-work/retry-policy.d.ts +88 -0
- package/dist/query/unit-of-work/retry-policy.d.ts.map +1 -0
- package/dist/query/unit-of-work/retry-policy.js +61 -0
- 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} +145 -58
- 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} +435 -198
- 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 +32 -0
- package/dist/with-database.d.ts.map +1 -0
- package/dist/with-database.js +34 -0
- package/dist/with-database.js.map +1 -0
- package/package.json +43 -9
- package/src/adapters/adapters.ts +23 -4
- package/src/adapters/drizzle/drizzle-adapter-pglite.test.ts +140 -185
- package/src/adapters/drizzle/{drizzle-adapter-sqlite.test.ts → drizzle-adapter-sqlite3.test.ts} +187 -55
- package/src/adapters/drizzle/drizzle-adapter.ts +14 -93
- package/src/adapters/drizzle/generate.test.ts +102 -269
- package/src/adapters/drizzle/generate.ts +89 -63
- 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 +36 -5
- 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 +90 -96
- package/src/adapters/kysely/kysely-adapter-sqlocal.test.ts +215 -0
- package/src/adapters/kysely/kysely-adapter.ts +10 -242
- package/src/adapters/{drizzle/drizzle-query.ts → shared/from-unit-of-work-compiler.ts} +111 -106
- 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 +887 -0
- package/src/db-fragment-definition-builder.ts +737 -0
- package/src/db-fragment-instantiator.test.ts +543 -0
- package/src/db-fragment-integration.test.ts +406 -0
- package/src/fragments/internal-fragment.test.ts +549 -0
- package/src/fragments/internal-fragment.ts +249 -0
- package/src/hooks/hooks.test.ts +575 -0
- package/src/hooks/hooks.ts +179 -0
- package/src/migration-engine/generation-engine.test.ts +60 -27
- package/src/migration-engine/generation-engine.ts +99 -92
- package/src/mod.ts +139 -78
- package/src/query/column-defaults.ts +49 -0
- package/src/query/cursor.test.ts +147 -3
- package/src/query/cursor.ts +25 -8
- 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} +4 -4
- package/src/query/unit-of-work/execute-unit-of-work.test.ts +1310 -0
- package/src/query/unit-of-work/execute-unit-of-work.ts +504 -0
- package/src/query/unit-of-work/retry-policy.test.ts +217 -0
- package/src/query/unit-of-work/retry-policy.ts +141 -0
- package/src/query/unit-of-work/unit-of-work-coordinator.test.ts +831 -0
- package/src/query/{unit-of-work-types.test.ts → unit-of-work/unit-of-work-types.test.ts} +7 -5
- package/src/query/unit-of-work/unit-of-work.test.ts +1716 -0
- package/src/query/{unit-of-work.ts → unit-of-work/unit-of-work.ts} +716 -420
- package/src/query/{result-transform.test.ts → value-decoding.test.ts} +45 -298
- 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 +152 -0
- package/tsdown.config.ts +8 -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 -315
- package/dist/adapters/drizzle/drizzle-uow-compiler.js.map +0 -1
- package/dist/adapters/drizzle/drizzle-uow-decoder.js +0 -116
- package/dist/adapters/drizzle/drizzle-uow-decoder.js.map +0 -1
- package/dist/adapters/drizzle/drizzle-uow-executor.js +0 -149
- 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 +0 -14
- 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 -66
- package/dist/adapters/kysely/kysely-query-compiler.js.map +0 -1
- package/dist/adapters/kysely/kysely-query.d.ts +0 -22
- package/dist/adapters/kysely/kysely-query.d.ts.map +0 -1
- package/dist/adapters/kysely/kysely-query.js +0 -223
- package/dist/adapters/kysely/kysely-query.js.map +0 -1
- package/dist/adapters/kysely/kysely-shared.d.ts.map +0 -1
- package/dist/adapters/kysely/kysely-shared.js +0 -18
- package/dist/adapters/kysely/kysely-shared.js.map +0 -1
- package/dist/adapters/kysely/kysely-uow-compiler.js +0 -170
- package/dist/adapters/kysely/kysely-uow-compiler.js.map +0 -1
- package/dist/adapters/kysely/kysely-uow-executor.js +0 -89
- 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/bind-services.d.ts +0 -7
- package/dist/bind-services.d.ts.map +0 -1
- package/dist/bind-services.js +0 -14
- package/dist/bind-services.js.map +0 -1
- package/dist/fragment.d.ts +0 -173
- package/dist/fragment.d.ts.map +0 -1
- package/dist/fragment.js +0 -191
- package/dist/fragment.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/query/query.d.ts.map +0 -1
- package/dist/query/result-transform.js +0 -168
- package/dist/query/result-transform.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 -106
- package/dist/schema/serialize.js.map +0 -1
- package/dist/shared/settings-schema.js +0 -36
- package/dist/shared/settings-schema.js.map +0 -1
- package/src/adapters/drizzle/drizzle-adapter.test.ts +0 -170
- 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.test.ts +0 -1383
- package/src/adapters/drizzle/drizzle-uow-compiler.ts +0 -636
- package/src/adapters/drizzle/drizzle-uow-decoder.ts +0 -218
- package/src/adapters/drizzle/drizzle-uow-executor.ts +0 -276
- 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 -132
- package/src/adapters/kysely/kysely-query.test.ts +0 -498
- package/src/adapters/kysely/kysely-query.ts +0 -390
- package/src/adapters/kysely/kysely-shared.ts +0 -23
- package/src/adapters/kysely/kysely-uow-compiler.test.ts +0 -998
- package/src/adapters/kysely/kysely-uow-compiler.ts +0 -318
- package/src/adapters/kysely/kysely-uow-executor.ts +0 -145
- package/src/adapters/kysely/kysely-uow-joins.test.ts +0 -811
- 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/bind-services.test.ts +0 -214
- package/src/bind-services.ts +0 -37
- package/src/db-fragment.test.ts +0 -800
- package/src/fragment.ts +0 -727
- package/src/query/result-transform.ts +0 -271
- package/src/query/unit-of-work-multi-schema.test.ts +0 -64
- package/src/query/unit-of-work.test.ts +0 -943
- package/src/schema/serialize.ts +0 -396
- package/src/shared/settings-schema.ts +0 -61
- package/src/uow-context-integration.test.ts +0 -102
- package/src/uow-context.test.ts +0 -182
- /package/dist/query/{query.js → simple-query-interface.js} +0 -0
|
@@ -1,261 +0,0 @@
|
|
|
1
|
-
import { Kysely, PostgresDialect, SqliteDialect } from "kysely";
|
|
2
|
-
import { describe, expect, beforeAll, test } from "vitest";
|
|
3
|
-
import { KyselyAdapter } from "../kysely-adapter";
|
|
4
|
-
import { column, idColumn, referenceColumn, schema } from "../../../schema/create";
|
|
5
|
-
|
|
6
|
-
describe("KyselyMigrator", () => {
|
|
7
|
-
const testSchema = schema((s) => {
|
|
8
|
-
return s
|
|
9
|
-
.addTable("users", (t) => {
|
|
10
|
-
return t.addColumn("id", idColumn()).addColumn("name", column("string"));
|
|
11
|
-
})
|
|
12
|
-
.alterTable("users", (t) => {
|
|
13
|
-
return t
|
|
14
|
-
.addColumn("age", column("integer").nullable())
|
|
15
|
-
.createIndex("name_idx", ["name"])
|
|
16
|
-
.createIndex("age_idx", ["age"]);
|
|
17
|
-
})
|
|
18
|
-
.addTable("posts", (t) => {
|
|
19
|
-
return t
|
|
20
|
-
.addColumn("id", idColumn())
|
|
21
|
-
.addColumn("title", column("string"))
|
|
22
|
-
.addColumn("user_id", column("string"));
|
|
23
|
-
})
|
|
24
|
-
.addReference("author", {
|
|
25
|
-
type: "one",
|
|
26
|
-
from: { table: "posts", column: "user_id" },
|
|
27
|
-
to: { table: "users", column: "id" },
|
|
28
|
-
});
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
32
|
-
let db: Kysely<any>;
|
|
33
|
-
let adapter: KyselyAdapter;
|
|
34
|
-
|
|
35
|
-
beforeAll(async () => {
|
|
36
|
-
// Create a Kysely instance with a PostgresDialect, but not actually connected to a database
|
|
37
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
38
|
-
db = new Kysely({ dialect: new PostgresDialect({} as any) });
|
|
39
|
-
adapter = new KyselyAdapter({ db, provider: "postgresql" });
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
test("generate SQL for migration 0 -> 1 (create users table)", async () => {
|
|
43
|
-
const migrator = adapter.createMigrationEngine(testSchema, "test_namespace");
|
|
44
|
-
const preparedMigration = await migrator.prepareMigrationTo(1, {
|
|
45
|
-
updateSettings: true,
|
|
46
|
-
fromVersion: 0,
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
expect(preparedMigration.operations.length).toBeGreaterThan(0);
|
|
50
|
-
const sql = preparedMigration.getSQL?.();
|
|
51
|
-
expect(sql).toBeDefined();
|
|
52
|
-
expect(sql).toMatchInlineSnapshot(`
|
|
53
|
-
"create table "users_test_namespace" ("id" varchar(30) not null unique, "name" text not null, "_internalId" bigserial not null primary key, "_version" integer default 0 not null);
|
|
54
|
-
|
|
55
|
-
insert into "fragno_db_settings" ("id", "key", "value") values ('jprP_43K5uMwxAFiepbbrQ', 'test_namespace.schema_version', '1');"
|
|
56
|
-
`);
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
test("generate SQL for migration 0 -> 2 (create users table and add age)", async () => {
|
|
60
|
-
const migrator = adapter.createMigrationEngine(testSchema, "test_namespace");
|
|
61
|
-
const preparedMigration = await migrator.prepareMigrationTo(2, {
|
|
62
|
-
updateSettings: true,
|
|
63
|
-
fromVersion: 0,
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
expect(preparedMigration.operations.length).toBeGreaterThan(0);
|
|
67
|
-
const sql = preparedMigration.getSQL?.();
|
|
68
|
-
expect(sql).toBeDefined();
|
|
69
|
-
expect(sql).toMatchInlineSnapshot(`
|
|
70
|
-
"create table "users_test_namespace" ("id" varchar(30) not null unique, "name" text not null, "_internalId" bigserial not null primary key, "_version" integer default 0 not null);
|
|
71
|
-
|
|
72
|
-
alter table "users_test_namespace" add column "age" integer;
|
|
73
|
-
|
|
74
|
-
create index "name_idx" on "users_test_namespace" ("name");
|
|
75
|
-
|
|
76
|
-
create index "age_idx" on "users_test_namespace" ("age");
|
|
77
|
-
|
|
78
|
-
insert into "fragno_db_settings" ("id", "key", "value") values ('jprP_43K5uMwxAFiepbbrQ', 'test_namespace.schema_version', '2');"
|
|
79
|
-
`);
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
test("generate SQL for migration 1 -> 2 (add age column and indexes)", async () => {
|
|
83
|
-
const migrator = adapter.createMigrationEngine(testSchema, "test_namespace");
|
|
84
|
-
const preparedMigration = await migrator.prepareMigrationTo(2, {
|
|
85
|
-
updateSettings: true,
|
|
86
|
-
fromVersion: 1,
|
|
87
|
-
});
|
|
88
|
-
|
|
89
|
-
expect(preparedMigration.operations.length).toBeGreaterThan(0);
|
|
90
|
-
const sql = preparedMigration.getSQL?.();
|
|
91
|
-
expect(sql).toBeDefined();
|
|
92
|
-
expect(sql).toMatchInlineSnapshot(`
|
|
93
|
-
"alter table "users_test_namespace" add column "age" integer;
|
|
94
|
-
|
|
95
|
-
create index "name_idx" on "users_test_namespace" ("name");
|
|
96
|
-
|
|
97
|
-
create index "age_idx" on "users_test_namespace" ("age");
|
|
98
|
-
|
|
99
|
-
update "fragno_db_settings" set "value" = '2' where "key" = 'test_namespace.schema_version';"
|
|
100
|
-
`);
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
test("generate SQL for migration 0 -> 3 (full schema)", async () => {
|
|
104
|
-
const migrator = adapter.createMigrationEngine(testSchema, "test_namespace");
|
|
105
|
-
const preparedMigration = await migrator.prepareMigrationTo(3, {
|
|
106
|
-
updateSettings: true,
|
|
107
|
-
fromVersion: 0,
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
expect(preparedMigration.operations.length).toBeGreaterThan(0);
|
|
111
|
-
const sql = preparedMigration.getSQL?.();
|
|
112
|
-
expect(sql).toBeDefined();
|
|
113
|
-
expect(sql).toMatchInlineSnapshot(`
|
|
114
|
-
"create table "users_test_namespace" ("id" varchar(30) not null unique, "name" text not null, "_internalId" bigserial not null primary key, "_version" integer default 0 not null);
|
|
115
|
-
|
|
116
|
-
alter table "users_test_namespace" add column "age" integer;
|
|
117
|
-
|
|
118
|
-
create index "name_idx" on "users_test_namespace" ("name");
|
|
119
|
-
|
|
120
|
-
create index "age_idx" on "users_test_namespace" ("age");
|
|
121
|
-
|
|
122
|
-
create table "posts_test_namespace" ("id" varchar(30) not null unique, "title" text not null, "user_id" text not null, "_internalId" bigserial not null primary key, "_version" integer default 0 not null);
|
|
123
|
-
|
|
124
|
-
insert into "fragno_db_settings" ("id", "key", "value") values ('jprP_43K5uMwxAFiepbbrQ', 'test_namespace.schema_version', '3');"
|
|
125
|
-
`);
|
|
126
|
-
});
|
|
127
|
-
|
|
128
|
-
test("generate SQL for migration 2 -> 3 (add posts table)", async () => {
|
|
129
|
-
const migrator = adapter.createMigrationEngine(testSchema, "test_namespace");
|
|
130
|
-
const preparedMigration = await migrator.prepareMigrationTo(3, {
|
|
131
|
-
updateSettings: true,
|
|
132
|
-
fromVersion: 2,
|
|
133
|
-
});
|
|
134
|
-
|
|
135
|
-
expect(preparedMigration.operations.length).toBeGreaterThan(0);
|
|
136
|
-
const sql = preparedMigration.getSQL?.();
|
|
137
|
-
expect(sql).toBeDefined();
|
|
138
|
-
expect(sql).toMatchInlineSnapshot(`
|
|
139
|
-
"create table "posts_test_namespace" ("id" varchar(30) not null unique, "title" text not null, "user_id" text not null, "_internalId" bigserial not null primary key, "_version" integer default 0 not null);
|
|
140
|
-
|
|
141
|
-
update "fragno_db_settings" set "value" = '3' where "key" = 'test_namespace.schema_version';"
|
|
142
|
-
`);
|
|
143
|
-
});
|
|
144
|
-
|
|
145
|
-
test("generate empty SQL for migration 2 -> 2 (no changes)", async () => {
|
|
146
|
-
const migrator = adapter.createMigrationEngine(testSchema, "test_namespace");
|
|
147
|
-
const preparedMigration = await migrator.prepareMigrationTo(2, {
|
|
148
|
-
updateSettings: true,
|
|
149
|
-
fromVersion: 2,
|
|
150
|
-
});
|
|
151
|
-
|
|
152
|
-
expect(preparedMigration.operations.length).toBe(0);
|
|
153
|
-
const sql = preparedMigration.getSQL?.();
|
|
154
|
-
expect(sql).toBeDefined();
|
|
155
|
-
expect(sql).toBe("");
|
|
156
|
-
});
|
|
157
|
-
|
|
158
|
-
test("throw error for backward migration", async () => {
|
|
159
|
-
const migrator = adapter.createMigrationEngine(testSchema, "test_namespace");
|
|
160
|
-
|
|
161
|
-
await expect(
|
|
162
|
-
migrator.prepareMigrationTo(1, {
|
|
163
|
-
updateSettings: true,
|
|
164
|
-
fromVersion: 2,
|
|
165
|
-
}),
|
|
166
|
-
).rejects.toThrow("Cannot migrate backwards");
|
|
167
|
-
});
|
|
168
|
-
|
|
169
|
-
test("throw error for version beyond schema", async () => {
|
|
170
|
-
const migrator = adapter.createMigrationEngine(testSchema, "test_namespace");
|
|
171
|
-
|
|
172
|
-
await expect(
|
|
173
|
-
migrator.prepareMigrationTo(10, {
|
|
174
|
-
updateSettings: true,
|
|
175
|
-
fromVersion: 0,
|
|
176
|
-
}),
|
|
177
|
-
).rejects.toThrow("schema only has version 4");
|
|
178
|
-
});
|
|
179
|
-
});
|
|
180
|
-
|
|
181
|
-
describe("KyselyMigrator - SQLite Foreign Key Merging", () => {
|
|
182
|
-
// Test the user's exact example schema
|
|
183
|
-
const userExampleSchema = schema((s) => {
|
|
184
|
-
return s
|
|
185
|
-
.addTable("users", (t) => {
|
|
186
|
-
return t.addColumn("id", idColumn());
|
|
187
|
-
})
|
|
188
|
-
.addTable("posts", (t) => {
|
|
189
|
-
return t.addColumn("id", idColumn()).addColumn("authorId", referenceColumn());
|
|
190
|
-
})
|
|
191
|
-
.addReference("author", {
|
|
192
|
-
type: "one",
|
|
193
|
-
from: { table: "posts", column: "authorId" },
|
|
194
|
-
to: { table: "users", column: "id" },
|
|
195
|
-
});
|
|
196
|
-
});
|
|
197
|
-
|
|
198
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
199
|
-
let db: Kysely<any>;
|
|
200
|
-
let adapter: KyselyAdapter;
|
|
201
|
-
|
|
202
|
-
beforeAll(async () => {
|
|
203
|
-
// Create a Kysely instance with SQLite dialect
|
|
204
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
205
|
-
db = new Kysely({ dialect: new SqliteDialect({} as any) });
|
|
206
|
-
adapter = new KyselyAdapter({ db, provider: "sqlite" });
|
|
207
|
-
});
|
|
208
|
-
|
|
209
|
-
test("SQLite should merge foreign keys into create-table operations", async () => {
|
|
210
|
-
const migrator = adapter.createMigrationEngine(userExampleSchema, "test");
|
|
211
|
-
|
|
212
|
-
// Migrate from 0 -> 3 (all tables + FK in one batch)
|
|
213
|
-
const preparedMigration = await migrator.prepareMigrationTo(3, {
|
|
214
|
-
updateSettings: true,
|
|
215
|
-
fromVersion: 0,
|
|
216
|
-
});
|
|
217
|
-
|
|
218
|
-
expect(preparedMigration.operations.length).toBeGreaterThan(0);
|
|
219
|
-
const sql = preparedMigration.getSQL?.();
|
|
220
|
-
expect(sql).toBeDefined();
|
|
221
|
-
|
|
222
|
-
// The SQL should have PRAGMA defer_foreign_keys
|
|
223
|
-
expect(sql).toContain("PRAGMA defer_foreign_keys = ON");
|
|
224
|
-
|
|
225
|
-
// Should create users table
|
|
226
|
-
expect(sql).toContain('create table "users_test"');
|
|
227
|
-
|
|
228
|
-
// Should create posts table WITH inline foreign key constraint
|
|
229
|
-
expect(sql).toContain('create table "posts_test"');
|
|
230
|
-
expect(sql).toContain("foreign key");
|
|
231
|
-
expect(sql).toContain("authorId");
|
|
232
|
-
expect(sql).toContain('references "users_test"');
|
|
233
|
-
|
|
234
|
-
// Should NOT have a separate ALTER TABLE ADD FOREIGN KEY
|
|
235
|
-
// (SQLite doesn't support it, and we've merged it into create-table)
|
|
236
|
-
expect(sql).not.toMatch(/alter table.*add.*foreign key/i);
|
|
237
|
-
});
|
|
238
|
-
|
|
239
|
-
test("SQLite FK merging full schema verification", async () => {
|
|
240
|
-
const migrator = adapter.createMigrationEngine(userExampleSchema, "test");
|
|
241
|
-
|
|
242
|
-
const preparedMigration = await migrator.prepareMigrationTo(3, {
|
|
243
|
-
updateSettings: true,
|
|
244
|
-
fromVersion: 0,
|
|
245
|
-
});
|
|
246
|
-
|
|
247
|
-
const sql = preparedMigration.getSQL?.();
|
|
248
|
-
expect(sql).toBeDefined();
|
|
249
|
-
|
|
250
|
-
// Verify the complete SQL snapshot
|
|
251
|
-
expect(sql).toMatchInlineSnapshot(`
|
|
252
|
-
"PRAGMA defer_foreign_keys = ON;
|
|
253
|
-
|
|
254
|
-
create table "users_test" ("id" text not null unique, "_internalId" integer not null primary key autoincrement, "_version" integer default 0 not null);
|
|
255
|
-
|
|
256
|
-
create table "posts_test" ("id" text not null unique, "authorId" integer not null, "_internalId" integer not null primary key autoincrement, "_version" integer default 0 not null, constraint "posts_users_author_fk" foreign key ("authorId") references "users_test" ("_internalId") on delete restrict on update restrict);
|
|
257
|
-
|
|
258
|
-
insert into "fragno_db_settings" ("id", "key", "value") values ('BflimUWc1NbCMMDD9SM3gQ', 'test.schema_version', '3');"
|
|
259
|
-
`);
|
|
260
|
-
});
|
|
261
|
-
});
|
|
@@ -1,214 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from "vitest";
|
|
2
|
-
import { bindServicesToContext } from "./bind-services";
|
|
3
|
-
import { withUnitOfWork, type DatabaseRequestThisContext } from "./fragment";
|
|
4
|
-
import type { IUnitOfWorkBase } from "./query/unit-of-work";
|
|
5
|
-
import { schema, idColumn } from "./schema/create";
|
|
6
|
-
|
|
7
|
-
// Create a simple test schema for tests
|
|
8
|
-
const testSchema = schema((s) => {
|
|
9
|
-
return s.addTable("test", (t) => {
|
|
10
|
-
return t.addColumn("id", idColumn());
|
|
11
|
-
});
|
|
12
|
-
});
|
|
13
|
-
|
|
14
|
-
describe("bindServicesToContext", () => {
|
|
15
|
-
it("should bind simple function to context", async () => {
|
|
16
|
-
const mockSchemaView = { test: "schema-view" };
|
|
17
|
-
const mockUow = {
|
|
18
|
-
test: "uow",
|
|
19
|
-
forSchema: () => mockSchemaView,
|
|
20
|
-
} as unknown as IUnitOfWorkBase;
|
|
21
|
-
|
|
22
|
-
const services = {
|
|
23
|
-
testMethod: function (this: DatabaseRequestThisContext) {
|
|
24
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
25
|
-
return this.getUnitOfWork(testSchema as any);
|
|
26
|
-
},
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
const bound = bindServicesToContext(services);
|
|
30
|
-
|
|
31
|
-
const result = await withUnitOfWork(mockUow, () => bound.testMethod());
|
|
32
|
-
|
|
33
|
-
expect(result).toBe(mockSchemaView);
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
it("should bind multiple functions", async () => {
|
|
37
|
-
const mockSchemaView = { test: "schema-view" };
|
|
38
|
-
const mockUow = {
|
|
39
|
-
test: "uow",
|
|
40
|
-
forSchema: () => mockSchemaView,
|
|
41
|
-
} as unknown as IUnitOfWorkBase;
|
|
42
|
-
|
|
43
|
-
const services = {
|
|
44
|
-
method1: function (this: DatabaseRequestThisContext) {
|
|
45
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
46
|
-
return this.getUnitOfWork(testSchema as any);
|
|
47
|
-
},
|
|
48
|
-
method2: function (this: DatabaseRequestThisContext) {
|
|
49
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
50
|
-
return this.getUnitOfWork(testSchema as any);
|
|
51
|
-
},
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
const bound = bindServicesToContext(services);
|
|
55
|
-
|
|
56
|
-
await withUnitOfWork(mockUow, () => {
|
|
57
|
-
expect(bound.method1()).toBe(mockSchemaView);
|
|
58
|
-
expect(bound.method2()).toBe(mockSchemaView);
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
it("should bind nested service objects", async () => {
|
|
63
|
-
const mockSchemaView = { test: "schema-view" };
|
|
64
|
-
const mockUow = {
|
|
65
|
-
test: "uow",
|
|
66
|
-
forSchema: () => mockSchemaView,
|
|
67
|
-
} as unknown as IUnitOfWorkBase;
|
|
68
|
-
|
|
69
|
-
const services = {
|
|
70
|
-
nested: {
|
|
71
|
-
method: function (this: DatabaseRequestThisContext) {
|
|
72
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
73
|
-
return this.getUnitOfWork(testSchema as any);
|
|
74
|
-
},
|
|
75
|
-
},
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
const bound = bindServicesToContext(services);
|
|
79
|
-
|
|
80
|
-
const result = await withUnitOfWork(mockUow, () => bound.nested.method());
|
|
81
|
-
|
|
82
|
-
expect(result).toBe(mockSchemaView);
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
it("should preserve non-function properties", () => {
|
|
86
|
-
const services = {
|
|
87
|
-
method: function () {
|
|
88
|
-
return "test";
|
|
89
|
-
},
|
|
90
|
-
constant: "value",
|
|
91
|
-
number: 42,
|
|
92
|
-
};
|
|
93
|
-
|
|
94
|
-
const bound = bindServicesToContext(services);
|
|
95
|
-
|
|
96
|
-
expect(bound.constant).toBe("value");
|
|
97
|
-
expect(bound.number).toBe(42);
|
|
98
|
-
expect(bound.method()).toBe("test");
|
|
99
|
-
});
|
|
100
|
-
|
|
101
|
-
it("should handle functions with parameters", async () => {
|
|
102
|
-
const mockSchemaView = { test: "schema-view" };
|
|
103
|
-
const mockUow = {
|
|
104
|
-
test: "uow",
|
|
105
|
-
forSchema: () => mockSchemaView,
|
|
106
|
-
} as unknown as IUnitOfWorkBase;
|
|
107
|
-
|
|
108
|
-
const services = {
|
|
109
|
-
testMethod: function (this: DatabaseRequestThisContext, param1: string, param2: number) {
|
|
110
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
111
|
-
const uow = this.getUnitOfWork(testSchema as any);
|
|
112
|
-
return { uow, param1, param2 };
|
|
113
|
-
},
|
|
114
|
-
};
|
|
115
|
-
|
|
116
|
-
const bound = bindServicesToContext(services);
|
|
117
|
-
|
|
118
|
-
const result = await withUnitOfWork(mockUow, () => bound.testMethod("hello", 123));
|
|
119
|
-
|
|
120
|
-
expect(result.uow).toBe(mockSchemaView);
|
|
121
|
-
expect(result.param1).toBe("hello");
|
|
122
|
-
expect(result.param2).toBe(123);
|
|
123
|
-
});
|
|
124
|
-
|
|
125
|
-
it("should handle async functions", async () => {
|
|
126
|
-
const mockSchemaView = { test: "schema-view" };
|
|
127
|
-
const mockUow = {
|
|
128
|
-
test: "uow",
|
|
129
|
-
forSchema: () => mockSchemaView,
|
|
130
|
-
} as unknown as IUnitOfWorkBase;
|
|
131
|
-
|
|
132
|
-
const services = {
|
|
133
|
-
asyncMethod: async function (this: DatabaseRequestThisContext) {
|
|
134
|
-
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
135
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
136
|
-
return this.getUnitOfWork(testSchema as any);
|
|
137
|
-
},
|
|
138
|
-
};
|
|
139
|
-
|
|
140
|
-
const bound = bindServicesToContext(services);
|
|
141
|
-
|
|
142
|
-
const result = await withUnitOfWork(mockUow, async () => await bound.asyncMethod());
|
|
143
|
-
|
|
144
|
-
expect(result).toBe(mockSchemaView);
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
it("should not bind arrays", () => {
|
|
148
|
-
const services = {
|
|
149
|
-
array: [1, 2, 3],
|
|
150
|
-
method: function () {
|
|
151
|
-
return "test";
|
|
152
|
-
},
|
|
153
|
-
};
|
|
154
|
-
|
|
155
|
-
const bound = bindServicesToContext(services);
|
|
156
|
-
|
|
157
|
-
expect(bound.array).toEqual([1, 2, 3]);
|
|
158
|
-
expect(Array.isArray(bound.array)).toBe(true);
|
|
159
|
-
});
|
|
160
|
-
|
|
161
|
-
it("should handle deeply nested objects", async () => {
|
|
162
|
-
const mockSchemaView = { test: "schema-view" };
|
|
163
|
-
const mockUow = {
|
|
164
|
-
test: "uow",
|
|
165
|
-
forSchema: () => mockSchemaView,
|
|
166
|
-
} as unknown as IUnitOfWorkBase;
|
|
167
|
-
|
|
168
|
-
const services = {
|
|
169
|
-
level1: {
|
|
170
|
-
level2: {
|
|
171
|
-
level3: {
|
|
172
|
-
method: function (this: DatabaseRequestThisContext) {
|
|
173
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
174
|
-
return this.getUnitOfWork(testSchema as any);
|
|
175
|
-
},
|
|
176
|
-
},
|
|
177
|
-
},
|
|
178
|
-
},
|
|
179
|
-
};
|
|
180
|
-
|
|
181
|
-
const bound = bindServicesToContext(services);
|
|
182
|
-
|
|
183
|
-
const result = await withUnitOfWork(mockUow, () => bound.level1.level2.level3.method());
|
|
184
|
-
|
|
185
|
-
expect(result).toBe(mockSchemaView);
|
|
186
|
-
});
|
|
187
|
-
|
|
188
|
-
it("should allow bound services to access UOW independently", async () => {
|
|
189
|
-
const mockSchemaView = { test: "schema-view" };
|
|
190
|
-
const mockUow = {
|
|
191
|
-
test: "uow",
|
|
192
|
-
forSchema: () => mockSchemaView,
|
|
193
|
-
} as unknown as IUnitOfWorkBase;
|
|
194
|
-
|
|
195
|
-
const services = {
|
|
196
|
-
getUow: function (this: DatabaseRequestThisContext) {
|
|
197
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
198
|
-
return this.getUnitOfWork(testSchema as any);
|
|
199
|
-
},
|
|
200
|
-
callOther: function (this: DatabaseRequestThisContext) {
|
|
201
|
-
// Both methods can access UOW via their own `this` context
|
|
202
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
203
|
-
return this.getUnitOfWork(testSchema as any);
|
|
204
|
-
},
|
|
205
|
-
};
|
|
206
|
-
|
|
207
|
-
const bound = bindServicesToContext(services);
|
|
208
|
-
|
|
209
|
-
await withUnitOfWork(mockUow, () => {
|
|
210
|
-
expect(bound.getUow()).toBe(mockSchemaView);
|
|
211
|
-
expect(bound.callOther()).toBe(mockSchemaView);
|
|
212
|
-
});
|
|
213
|
-
});
|
|
214
|
-
});
|
package/src/bind-services.ts
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { serviceContext } from "./fragment";
|
|
2
|
-
|
|
3
|
-
// Type helper to remove 'this' parameter from functions
|
|
4
|
-
type OmitThisParameter<T> = T extends (this: infer _This, ...args: infer A) => infer R
|
|
5
|
-
? (...args: A) => R
|
|
6
|
-
: T;
|
|
7
|
-
|
|
8
|
-
// Recursively remove 'this' parameter from all functions in an object
|
|
9
|
-
export type BoundServices<T> = {
|
|
10
|
-
[K in keyof T]: T[K] extends (...args: never[]) => unknown
|
|
11
|
-
? OmitThisParameter<T[K]>
|
|
12
|
-
: T[K] extends Record<string, unknown>
|
|
13
|
-
? BoundServices<T[K]>
|
|
14
|
-
: T[K];
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
export function bindServicesToContext<T extends Record<string, unknown>>(
|
|
18
|
-
services: T,
|
|
19
|
-
): BoundServices<T> {
|
|
20
|
-
const bound = {} as BoundServices<T>;
|
|
21
|
-
|
|
22
|
-
for (const [key, value] of Object.entries(services)) {
|
|
23
|
-
if (typeof value === "function") {
|
|
24
|
-
// Bind function to serviceContext
|
|
25
|
-
bound[key as keyof T] = value.bind(serviceContext) as BoundServices<T>[keyof T];
|
|
26
|
-
} else if (value && typeof value === "object" && !Array.isArray(value)) {
|
|
27
|
-
// Recursively bind nested service objects
|
|
28
|
-
bound[key as keyof T] = bindServicesToContext(
|
|
29
|
-
value as Record<string, unknown>,
|
|
30
|
-
) as BoundServices<T>[keyof T];
|
|
31
|
-
} else {
|
|
32
|
-
bound[key as keyof T] = value as BoundServices<T>[keyof T];
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
return bound;
|
|
37
|
-
}
|