@fragno-dev/db 0.2.2 → 0.3.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 +202 -140
- package/CHANGELOG.md +35 -0
- package/README.md +30 -9
- package/dist/adapters/adapters.d.ts +23 -21
- package/dist/adapters/adapters.d.ts.map +1 -1
- package/dist/adapters/adapters.js.map +1 -1
- package/dist/adapters/generic-sql/driver-config.d.ts +16 -1
- package/dist/adapters/generic-sql/driver-config.d.ts.map +1 -1
- package/dist/adapters/generic-sql/driver-config.js +23 -1
- package/dist/adapters/generic-sql/driver-config.js.map +1 -1
- package/dist/adapters/generic-sql/generic-sql-adapter.d.ts +27 -9
- package/dist/adapters/generic-sql/generic-sql-adapter.d.ts.map +1 -1
- package/dist/adapters/generic-sql/generic-sql-adapter.js +55 -16
- package/dist/adapters/generic-sql/generic-sql-adapter.js.map +1 -1
- package/dist/adapters/generic-sql/generic-sql-uow-executor.js +129 -3
- package/dist/adapters/generic-sql/generic-sql-uow-executor.js.map +1 -1
- package/dist/adapters/generic-sql/migration/dialect/mysql.js +24 -5
- package/dist/adapters/generic-sql/migration/dialect/mysql.js.map +1 -1
- package/dist/adapters/generic-sql/migration/dialect/postgres.js +6 -5
- package/dist/adapters/generic-sql/migration/dialect/postgres.js.map +1 -1
- package/dist/adapters/generic-sql/migration/dialect/sqlite.js +21 -10
- package/dist/adapters/generic-sql/migration/dialect/sqlite.js.map +1 -1
- package/dist/adapters/generic-sql/migration/prepared-migrations.d.ts.map +1 -1
- package/dist/adapters/generic-sql/migration/prepared-migrations.js +8 -8
- package/dist/adapters/generic-sql/migration/prepared-migrations.js.map +1 -1
- package/dist/adapters/generic-sql/migration/sql-generator.js +74 -51
- package/dist/adapters/generic-sql/migration/sql-generator.js.map +1 -1
- package/dist/adapters/generic-sql/query/create-sql-query-compiler.js +6 -5
- package/dist/adapters/generic-sql/query/create-sql-query-compiler.js.map +1 -1
- package/dist/adapters/generic-sql/query/cursor-utils.js +42 -4
- package/dist/adapters/generic-sql/query/cursor-utils.js.map +1 -1
- package/dist/adapters/generic-sql/query/generic-sql-uow-operation-compiler.js +25 -17
- package/dist/adapters/generic-sql/query/generic-sql-uow-operation-compiler.js.map +1 -1
- package/dist/adapters/generic-sql/query/select-builder.js +5 -3
- package/dist/adapters/generic-sql/query/select-builder.js.map +1 -1
- package/dist/adapters/generic-sql/query/sql-query-compiler.js +15 -12
- package/dist/adapters/generic-sql/query/sql-query-compiler.js.map +1 -1
- package/dist/adapters/generic-sql/query/where-builder.js +39 -29
- package/dist/adapters/generic-sql/query/where-builder.js.map +1 -1
- package/dist/adapters/generic-sql/sqlite-storage.d.ts +13 -0
- package/dist/adapters/generic-sql/sqlite-storage.d.ts.map +1 -0
- package/dist/adapters/generic-sql/sqlite-storage.js +15 -0
- package/dist/adapters/generic-sql/sqlite-storage.js.map +1 -0
- package/dist/adapters/generic-sql/uow-decoder.js +7 -3
- package/dist/adapters/generic-sql/uow-decoder.js.map +1 -1
- package/dist/adapters/generic-sql/uow-encoder.js +28 -8
- package/dist/adapters/generic-sql/uow-encoder.js.map +1 -1
- package/dist/adapters/in-memory/condition-evaluator.js +131 -0
- package/dist/adapters/in-memory/condition-evaluator.js.map +1 -0
- package/dist/adapters/in-memory/errors.d.ts +13 -0
- package/dist/adapters/in-memory/errors.d.ts.map +1 -0
- package/dist/adapters/in-memory/errors.js +23 -0
- package/dist/adapters/in-memory/errors.js.map +1 -0
- package/dist/adapters/in-memory/in-memory-adapter.d.ts +27 -0
- package/dist/adapters/in-memory/in-memory-adapter.d.ts.map +1 -0
- package/dist/adapters/in-memory/in-memory-adapter.js +176 -0
- package/dist/adapters/in-memory/in-memory-adapter.js.map +1 -0
- package/dist/adapters/in-memory/in-memory-uow.js +648 -0
- package/dist/adapters/in-memory/in-memory-uow.js.map +1 -0
- package/dist/adapters/in-memory/index.d.ts +4 -0
- package/dist/adapters/in-memory/index.js +4 -0
- package/dist/adapters/in-memory/options.d.ts +28 -0
- package/dist/adapters/in-memory/options.d.ts.map +1 -0
- package/dist/adapters/in-memory/options.js +61 -0
- package/dist/adapters/in-memory/options.js.map +1 -0
- package/dist/adapters/in-memory/reference-resolution.js +26 -0
- package/dist/adapters/in-memory/reference-resolution.js.map +1 -0
- package/dist/adapters/in-memory/sorted-array-index.js +129 -0
- package/dist/adapters/in-memory/sorted-array-index.js.map +1 -0
- package/dist/adapters/in-memory/store.js +71 -0
- package/dist/adapters/in-memory/store.js.map +1 -0
- package/dist/adapters/in-memory/value-comparison.js +28 -0
- package/dist/adapters/in-memory/value-comparison.js.map +1 -0
- package/dist/adapters/shared/from-unit-of-work-compiler.js.map +1 -1
- package/dist/adapters/shared/uow-operation-compiler.js +11 -11
- package/dist/adapters/shared/uow-operation-compiler.js.map +1 -1
- package/dist/adapters/sql/index.d.ts +5 -0
- package/dist/adapters/sql/index.js +4 -0
- package/dist/db-fragment-definition-builder.d.ts +18 -7
- package/dist/db-fragment-definition-builder.d.ts.map +1 -1
- package/dist/db-fragment-definition-builder.js +116 -54
- package/dist/db-fragment-definition-builder.js.map +1 -1
- package/dist/dispatchers/cloudflare-do/index.d.ts +26 -0
- package/dist/dispatchers/cloudflare-do/index.d.ts.map +1 -0
- package/dist/dispatchers/cloudflare-do/index.js +63 -0
- package/dist/dispatchers/cloudflare-do/index.js.map +1 -0
- package/dist/dispatchers/node/index.d.ts +17 -0
- package/dist/dispatchers/node/index.d.ts.map +1 -0
- package/dist/dispatchers/node/index.js +59 -0
- package/dist/dispatchers/node/index.js.map +1 -0
- package/dist/fragments/internal-fragment.d.ts +79 -2
- package/dist/fragments/internal-fragment.d.ts.map +1 -1
- package/dist/fragments/internal-fragment.js +150 -32
- package/dist/fragments/internal-fragment.js.map +1 -1
- package/dist/fragments/internal-fragment.routes.js +29 -0
- package/dist/fragments/internal-fragment.routes.js.map +1 -0
- package/dist/fragments/internal-fragment.schema.d.ts +9 -0
- package/dist/fragments/internal-fragment.schema.d.ts.map +1 -0
- package/dist/fragments/internal-fragment.schema.js +22 -0
- package/dist/fragments/internal-fragment.schema.js.map +1 -0
- package/dist/hooks/durable-hooks-processor.d.ts +14 -0
- package/dist/hooks/durable-hooks-processor.d.ts.map +1 -0
- package/dist/hooks/durable-hooks-processor.js +32 -0
- package/dist/hooks/durable-hooks-processor.js.map +1 -0
- package/dist/hooks/hooks.d.ts +42 -1
- package/dist/hooks/hooks.d.ts.map +1 -1
- package/dist/hooks/hooks.js +72 -6
- package/dist/hooks/hooks.js.map +1 -1
- package/dist/migration-engine/auto-from-schema.js +14 -11
- package/dist/migration-engine/auto-from-schema.js.map +1 -1
- package/dist/migration-engine/generation-engine.d.ts +16 -10
- package/dist/migration-engine/generation-engine.d.ts.map +1 -1
- package/dist/migration-engine/generation-engine.js +72 -33
- package/dist/migration-engine/generation-engine.js.map +1 -1
- package/dist/migration-engine/shared.js.map +1 -1
- package/dist/mod.d.ts +15 -8
- package/dist/mod.d.ts.map +1 -1
- package/dist/mod.js +14 -8
- package/dist/mod.js.map +1 -1
- package/dist/naming/sql-naming.d.ts +19 -0
- package/dist/naming/sql-naming.d.ts.map +1 -0
- package/dist/naming/sql-naming.js +116 -0
- package/dist/naming/sql-naming.js.map +1 -0
- package/dist/node_modules/.pnpm/{rou3@0.7.10 → rou3@0.7.12}/node_modules/rou3/dist/index.js +8 -5
- package/dist/node_modules/.pnpm/rou3@0.7.12/node_modules/rou3/dist/index.js.map +1 -0
- package/dist/outbox/outbox-builder.js +156 -0
- package/dist/outbox/outbox-builder.js.map +1 -0
- package/dist/outbox/outbox.d.ts +52 -0
- package/dist/outbox/outbox.d.ts.map +1 -0
- package/dist/outbox/outbox.js +37 -0
- package/dist/outbox/outbox.js.map +1 -0
- package/dist/packages/fragno/dist/api/fragment-definition-builder.js +3 -2
- package/dist/packages/fragno/dist/api/fragment-definition-builder.js.map +1 -1
- package/dist/packages/fragno/dist/api/fragment-instantiator.js +164 -20
- package/dist/packages/fragno/dist/api/fragment-instantiator.js.map +1 -1
- package/dist/packages/fragno/dist/api/request-input-context.js +67 -0
- package/dist/packages/fragno/dist/api/request-input-context.js.map +1 -1
- package/dist/packages/fragno/dist/api/route.js +14 -1
- package/dist/packages/fragno/dist/api/route.js.map +1 -1
- package/dist/packages/fragno/dist/internal/trace-context.js +12 -0
- package/dist/packages/fragno/dist/internal/trace-context.js.map +1 -0
- package/dist/query/column-defaults.js +20 -4
- package/dist/query/column-defaults.js.map +1 -1
- package/dist/query/cursor.d.ts +3 -1
- package/dist/query/cursor.d.ts.map +1 -1
- package/dist/query/cursor.js +45 -14
- package/dist/query/cursor.js.map +1 -1
- package/dist/query/db-now.d.ts +8 -0
- package/dist/query/db-now.d.ts.map +1 -0
- package/dist/query/db-now.js +7 -0
- package/dist/query/db-now.js.map +1 -0
- package/dist/query/serialize/create-sql-serializer.js +3 -2
- package/dist/query/serialize/create-sql-serializer.js.map +1 -1
- package/dist/query/serialize/dialect/mysql-serializer.js +12 -6
- package/dist/query/serialize/dialect/mysql-serializer.js.map +1 -1
- package/dist/query/serialize/dialect/postgres-serializer.js +25 -7
- package/dist/query/serialize/dialect/postgres-serializer.js.map +1 -1
- package/dist/query/serialize/dialect/sqlite-serializer.js +55 -11
- package/dist/query/serialize/dialect/sqlite-serializer.js.map +1 -1
- package/dist/query/serialize/sql-serializer.js +2 -2
- package/dist/query/serialize/sql-serializer.js.map +1 -1
- package/dist/query/simple-query-interface.d.ts +6 -1
- package/dist/query/simple-query-interface.d.ts.map +1 -1
- package/dist/query/unit-of-work/execute-unit-of-work.d.ts.map +1 -1
- package/dist/query/unit-of-work/execute-unit-of-work.js +11 -6
- package/dist/query/unit-of-work/execute-unit-of-work.js.map +1 -1
- package/dist/query/unit-of-work/unit-of-work.d.ts +50 -14
- package/dist/query/unit-of-work/unit-of-work.d.ts.map +1 -1
- package/dist/query/unit-of-work/unit-of-work.js +86 -5
- package/dist/query/unit-of-work/unit-of-work.js.map +1 -1
- package/dist/query/value-decoding.js +9 -6
- package/dist/query/value-decoding.js.map +1 -1
- package/dist/query/value-encoding.js +29 -9
- package/dist/query/value-encoding.js.map +1 -1
- package/dist/schema/create.d.ts +38 -14
- package/dist/schema/create.d.ts.map +1 -1
- package/dist/schema/create.js +81 -42
- package/dist/schema/create.js.map +1 -1
- package/dist/schema/generate-id.js +2 -2
- package/dist/schema/generate-id.js.map +1 -1
- package/dist/schema/type-conversion/create-sql-type-mapper.js +3 -2
- package/dist/schema/type-conversion/create-sql-type-mapper.js.map +1 -1
- package/dist/schema/type-conversion/dialect/sqlite.js +9 -0
- package/dist/schema/type-conversion/dialect/sqlite.js.map +1 -1
- package/dist/schema/validator.d.ts +10 -0
- package/dist/schema/validator.d.ts.map +1 -0
- package/dist/schema/validator.js +123 -0
- package/dist/schema/validator.js.map +1 -0
- package/dist/schema-output/drizzle.d.ts +30 -0
- package/dist/schema-output/drizzle.d.ts.map +1 -0
- package/dist/{adapters/drizzle/generate.js → schema-output/drizzle.js} +82 -56
- package/dist/schema-output/drizzle.js.map +1 -0
- package/dist/schema-output/prisma.d.ts +17 -0
- package/dist/schema-output/prisma.d.ts.map +1 -0
- package/dist/schema-output/prisma.js +296 -0
- package/dist/schema-output/prisma.js.map +1 -0
- package/dist/util/default-database-adapter.js +61 -0
- package/dist/util/default-database-adapter.js.map +1 -0
- package/dist/with-database.d.ts +1 -1
- package/dist/with-database.d.ts.map +1 -1
- package/dist/with-database.js +12 -3
- package/dist/with-database.js.map +1 -1
- package/package.json +43 -28
- package/src/adapters/adapters.ts +30 -24
- package/src/adapters/drizzle/migrate-drizzle.test.ts +54 -33
- package/src/adapters/drizzle/migration-parity-drizzle-kit.test.ts +599 -0
- package/src/adapters/drizzle/test-utils.ts +12 -8
- package/src/adapters/generic-sql/driver-config.ts +38 -0
- package/src/adapters/generic-sql/generic-sql-adapter.test.ts +5 -5
- package/src/adapters/generic-sql/generic-sql-adapter.ts +110 -24
- package/src/adapters/generic-sql/generic-sql-uow-executor.test.ts +54 -0
- package/src/adapters/generic-sql/generic-sql-uow-executor.ts +231 -3
- package/src/adapters/generic-sql/migration/adapter-migration-parity.test.ts +118 -0
- package/src/adapters/generic-sql/migration/dialect/mysql.test.ts +26 -8
- package/src/adapters/generic-sql/migration/dialect/mysql.ts +46 -8
- package/src/adapters/generic-sql/migration/dialect/postgres.test.ts +25 -7
- package/src/adapters/generic-sql/migration/dialect/postgres.ts +8 -4
- package/src/adapters/generic-sql/migration/dialect/sqlite.test.ts +47 -8
- package/src/adapters/generic-sql/migration/dialect/sqlite.ts +27 -12
- package/src/adapters/generic-sql/migration/prepared-migrations.test.ts +128 -39
- package/src/adapters/generic-sql/migration/prepared-migrations.ts +15 -8
- package/src/adapters/generic-sql/migration/sql-generator.ts +142 -65
- package/src/adapters/generic-sql/query/create-sql-query-compiler.ts +9 -6
- package/src/adapters/generic-sql/query/cursor-utils.test.ts +271 -0
- package/src/adapters/generic-sql/query/cursor-utils.ts +41 -6
- package/src/adapters/generic-sql/query/generic-sql-uow-operation-compiler.test.ts +27 -27
- package/src/adapters/generic-sql/query/generic-sql-uow-operation-compiler.ts +38 -24
- package/src/adapters/generic-sql/query/select-builder.test.ts +15 -11
- package/src/adapters/generic-sql/query/select-builder.ts +6 -2
- package/src/adapters/generic-sql/query/sql-query-compiler.test.ts +52 -2
- package/src/adapters/generic-sql/query/sql-query-compiler.ts +50 -15
- package/src/adapters/generic-sql/query/where-builder.test.ts +91 -17
- package/src/adapters/generic-sql/query/where-builder.ts +90 -38
- package/src/adapters/{kysely/kysely-adapter-pglite.test.ts → generic-sql/sql-adapter-pglite-migrations.test.ts} +6 -6
- package/src/adapters/generic-sql/sql-adapter-pglite-pagination.test.ts +806 -0
- package/src/adapters/{drizzle/drizzle-adapter-pglite.test.ts → generic-sql/sql-adapter-pglite-queries.test.ts} +11 -11
- package/src/adapters/generic-sql/{test/generic-drizzle-adapter-sqlite3.test.ts → sql-adapter-sqlite3-driver.test.ts} +10 -10
- package/src/adapters/{drizzle/drizzle-adapter-sqlite3.test.ts → generic-sql/sql-adapter-sqlite3-uow.test.ts} +7 -7
- package/src/adapters/{kysely/kysely-adapter-sqlocal.test.ts → generic-sql/sql-adapter-sqlocal.test.ts} +6 -6
- package/src/adapters/generic-sql/sqlite-storage.ts +20 -0
- package/src/adapters/generic-sql/uow-decoder.test.ts +1 -1
- package/src/adapters/generic-sql/uow-decoder.ts +21 -3
- package/src/adapters/generic-sql/uow-encoder.test.ts +33 -2
- package/src/adapters/generic-sql/uow-encoder.ts +50 -11
- package/src/adapters/in-memory/condition-evaluator.test.ts +193 -0
- package/src/adapters/in-memory/condition-evaluator.ts +275 -0
- package/src/adapters/in-memory/errors.ts +20 -0
- package/src/adapters/in-memory/in-memory-adapter.ts +277 -0
- package/src/adapters/in-memory/in-memory-uow.mutations.test.ts +296 -0
- package/src/adapters/in-memory/in-memory-uow.retrieval.test.ts +100 -0
- package/src/adapters/in-memory/in-memory-uow.ts +1348 -0
- package/src/adapters/in-memory/index.ts +3 -0
- package/src/adapters/in-memory/options.test.ts +41 -0
- package/src/adapters/in-memory/options.ts +87 -0
- package/src/adapters/in-memory/reference-resolution.test.ts +50 -0
- package/src/adapters/in-memory/reference-resolution.ts +67 -0
- package/src/adapters/in-memory/sorted-array-index.test.ts +123 -0
- package/src/adapters/in-memory/sorted-array-index.ts +228 -0
- package/src/adapters/in-memory/store.test.ts +68 -0
- package/src/adapters/in-memory/store.ts +145 -0
- package/src/adapters/in-memory/value-comparison.ts +53 -0
- package/src/adapters/in-memory/value-normalization.test.ts +57 -0
- package/src/adapters/prisma/prisma-adapter-sqlite3.test.ts +1163 -0
- package/src/adapters/shared/from-unit-of-work-compiler.ts +3 -1
- package/src/adapters/shared/uow-operation-compiler.ts +26 -16
- package/src/adapters/sql/index.ts +12 -0
- package/src/db-fragment-definition-builder.test.ts +30 -12
- package/src/db-fragment-definition-builder.ts +142 -73
- package/src/db-fragment-instantiator.test.ts +105 -13
- package/src/db-fragment-integration.test.ts +9 -7
- package/src/dispatchers/cloudflare-do/index.test.ts +73 -0
- package/src/dispatchers/cloudflare-do/index.ts +104 -0
- package/src/dispatchers/node/index.test.ts +91 -0
- package/src/dispatchers/node/index.ts +87 -0
- package/src/fragments/internal-fragment.routes.ts +42 -0
- package/src/fragments/internal-fragment.schema.ts +51 -0
- package/src/fragments/internal-fragment.test.ts +458 -8
- package/src/fragments/internal-fragment.ts +322 -63
- package/src/hooks/durable-hooks-processor.test.ts +117 -0
- package/src/hooks/durable-hooks-processor.ts +67 -0
- package/src/hooks/hooks.test.ts +165 -5
- package/src/hooks/hooks.ts +197 -9
- package/src/migration-engine/auto-from-schema.test.ts +14 -14
- package/src/migration-engine/auto-from-schema.ts +5 -2
- package/src/migration-engine/create.test.ts +2 -2
- package/src/migration-engine/generation-engine.test.ts +229 -104
- package/src/migration-engine/generation-engine.ts +94 -64
- package/src/migration-engine/shared.ts +1 -0
- package/src/mod.ts +64 -26
- package/src/naming/sql-naming.ts +180 -0
- package/src/outbox/outbox-builder.ts +241 -0
- package/src/outbox/outbox.test.ts +253 -0
- package/src/outbox/outbox.ts +137 -0
- package/src/query/column-defaults.ts +41 -3
- package/src/query/condition-builder.test.ts +3 -3
- package/src/query/cursor.test.ts +116 -18
- package/src/query/cursor.ts +75 -26
- package/src/query/db-now.ts +6 -0
- package/src/query/query-type.test.ts +2 -2
- package/src/query/serialize/create-sql-serializer.ts +7 -2
- package/src/query/serialize/dialect/mysql-serializer.ts +12 -4
- package/src/query/serialize/dialect/postgres-serializer.ts +34 -4
- package/src/query/serialize/dialect/sqlite-serializer.test.ts +51 -1
- package/src/query/serialize/dialect/sqlite-serializer.ts +92 -9
- package/src/query/serialize/sql-serializer.ts +4 -4
- package/src/query/simple-query-interface.ts +5 -0
- package/src/query/unit-of-work/execute-unit-of-work.test.ts +25 -1
- package/src/query/unit-of-work/execute-unit-of-work.ts +25 -8
- package/src/query/unit-of-work/unit-of-work-coordinator.test.ts +12 -12
- package/src/query/unit-of-work/unit-of-work-types.test.ts +1 -1
- package/src/query/unit-of-work/unit-of-work.test.ts +168 -37
- package/src/query/unit-of-work/unit-of-work.ts +203 -18
- package/src/query/value-decoding.test.ts +13 -2
- package/src/query/value-decoding.ts +17 -4
- package/src/query/value-encoding.test.ts +85 -2
- package/src/query/value-encoding.ts +56 -6
- package/src/schema/create.test.ts +129 -42
- package/src/schema/create.ts +185 -47
- package/src/schema/generate-id.test.ts +2 -2
- package/src/schema/generate-id.ts +2 -2
- package/src/schema/serialize.test.ts +14 -2
- package/src/schema/type-conversion/create-sql-type-mapper.ts +7 -2
- package/src/schema/type-conversion/dialect/sqlite.ts +18 -0
- package/src/schema/type-conversion/type-mapping.test.ts +25 -1
- package/src/schema/validator.test.ts +197 -0
- package/src/schema/validator.ts +231 -0
- package/src/{adapters/drizzle/generate.test.ts → schema-output/drizzle.test.ts} +179 -129
- package/src/{adapters/drizzle/generate.ts → schema-output/drizzle.ts} +143 -93
- package/src/schema-output/prisma.test.ts +536 -0
- package/src/schema-output/prisma.ts +573 -0
- package/src/util/default-database-adapter.ts +106 -0
- package/src/with-database.ts +22 -3
- package/tsdown.config.ts +6 -4
- package/dist/adapters/drizzle/drizzle-adapter.d.ts +0 -20
- package/dist/adapters/drizzle/drizzle-adapter.d.ts.map +0 -1
- package/dist/adapters/drizzle/drizzle-adapter.js +0 -27
- package/dist/adapters/drizzle/drizzle-adapter.js.map +0 -1
- package/dist/adapters/drizzle/generate.d.ts +0 -30
- package/dist/adapters/drizzle/generate.d.ts.map +0 -1
- package/dist/adapters/drizzle/generate.js.map +0 -1
- package/dist/adapters/kysely/kysely-adapter.d.ts +0 -19
- package/dist/adapters/kysely/kysely-adapter.d.ts.map +0 -1
- package/dist/adapters/kysely/kysely-adapter.js +0 -17
- package/dist/adapters/kysely/kysely-adapter.js.map +0 -1
- package/dist/adapters/shared/table-name-mapper.d.ts +0 -12
- package/dist/adapters/shared/table-name-mapper.d.ts.map +0 -1
- package/dist/adapters/shared/table-name-mapper.js +0 -43
- package/dist/adapters/shared/table-name-mapper.js.map +0 -1
- package/dist/node_modules/.pnpm/rou3@0.7.10/node_modules/rou3/dist/index.js.map +0 -1
- package/dist/schema-generator/schema-generator.d.ts +0 -15
- package/dist/schema-generator/schema-generator.d.ts.map +0 -1
- package/src/adapters/drizzle/drizzle-adapter.ts +0 -39
- package/src/adapters/kysely/kysely-adapter.ts +0 -27
- package/src/adapters/shared/table-name-mapper.ts +0 -50
- package/src/schema-generator/schema-generator.ts +0 -12
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute-unit-of-work.js","names":["serviceCalls: TServiceCalls | undefined","typedUow: TypedUnitOfWork<TSchema, TRetrieveResults, unknown, THooks> | undefined","internal: TxResultInternal<\n TSchema,\n TRetrieveResults,\n TRetrieveSuccessResult,\n TServiceCalls,\n TMutateResult,\n TSuccessResult,\n THooks\n >","collected: TxResult<unknown>[]","serviceResults: unknown[]","serviceIntermediateResults: unknown[]","serviceFinalResults: unknown[]","context: HandlerTxContext<THooks>","retrieveResult: TRetrieveResults","retrieveSuccessResult: TRetrieveSuccessResult","mutateResult: TMutateResult | undefined","mutateCtx: HandlerTxMutateContext<\n TRetrieveSuccessResult,\n ExtractServiceRetrieveResults<TServiceCalls>,\n THooks\n >","finalResult: unknown","#state","callbacks: ServiceTxCallbacks<\n TSchema,\n TRetrieveResults,\n TRetrieveSuccessResult,\n TServiceCalls,\n TMutateResult,\n TTransformResult,\n THooks\n >"],"sources":["../../../src/query/unit-of-work/execute-unit-of-work.ts"],"sourcesContent":["import type { AnySchema } from \"../../schema/create\";\nimport type { TypedUnitOfWork, IUnitOfWork } from \"./unit-of-work\";\nimport type { HooksMap } from \"../../hooks/hooks\";\nimport { ExponentialBackoffRetryPolicy, type RetryPolicy } from \"./retry-policy\";\n\n/**\n * Symbol to identify TxResult objects\n */\nconst TX_RESULT_BRAND = Symbol(\"TxResult\");\n\n/**\n * Check if a value is a TxResult\n */\nexport function isTxResult(value: unknown): value is TxResult<unknown> {\n return (\n value !== null &&\n typeof value === \"object\" &&\n TX_RESULT_BRAND in value &&\n (value as Record<symbol, boolean>)[TX_RESULT_BRAND] === true\n );\n}\n\n/**\n * Extract the retrieve success result type from a TxResult.\n * If the TxResult has retrieveSuccess, returns its return type.\n * Otherwise returns the raw retrieve results type.\n * Handles undefined (for optional service patterns like optionalService?.method()).\n */\nexport type ExtractTxRetrieveSuccessResult<T> = T extends undefined\n ? undefined\n : T extends TxResult<unknown, infer R>\n ? R\n : never;\n\n/**\n * Extract the final result type from a TxResult.\n * Handles undefined (for optional service patterns like optionalService?.method()).\n */\nexport type ExtractTxFinalResult<T> = T extends undefined\n ? undefined\n : T extends TxResult<infer R, infer _>\n ? R\n : Awaited<T>;\n\n/**\n * Map over service calls array to extract retrieve success results from each service call.\n * Preserves tuple structure while extracting the retrieve success result type from each element.\n */\nexport type ExtractServiceRetrieveResults<T extends readonly unknown[]> = {\n [K in keyof T]: ExtractTxRetrieveSuccessResult<T[K]>;\n};\n\n/**\n * Map over service calls array to extract final results from each service call.\n * Preserves tuple structure while extracting the final result type from each element.\n */\nexport type ExtractServiceFinalResults<T extends readonly unknown[]> = {\n [K in keyof T]: ExtractTxFinalResult<T[K]>;\n};\n\n/**\n * Context passed to mutate callback for service methods\n */\nexport interface ServiceTxMutateContext<\n TSchema extends AnySchema,\n TRetrieveSuccessResult,\n TServiceRetrieveResults extends readonly unknown[],\n THooks extends HooksMap,\n> {\n /** Unit of work for scheduling mutations */\n uow: TypedUnitOfWork<TSchema, [], unknown, THooks>;\n /** Result from retrieveSuccess callback (or raw retrieve results if no retrieveSuccess) */\n retrieveResult: TRetrieveSuccessResult;\n /** Array of retrieve success results from service calls (intermediate results, not final) */\n serviceIntermediateResult: TServiceRetrieveResults;\n}\n\n/**\n * Context passed to handler-level callbacks\n */\nexport interface HandlerTxContext<THooks extends HooksMap> {\n /** Get a typed Unit of Work for the given schema */\n forSchema: <S extends AnySchema, H extends HooksMap = THooks>(\n schema: S,\n hooks?: H,\n ) => TypedUnitOfWork<S, [], unknown, H>;\n /** Unique key for this transaction attempt (for idempotency/deduplication) */\n idempotencyKey: string;\n /** Current attempt number (0-based) */\n currentAttempt: number;\n}\n\n/**\n * Context passed to handler mutate callback\n */\nexport interface HandlerTxMutateContext<\n TRetrieveSuccessResult,\n TServiceRetrieveResults extends readonly unknown[],\n THooks extends HooksMap,\n> extends HandlerTxContext<THooks> {\n /** Result from retrieveSuccess callback (or raw retrieve results if no retrieveSuccess) */\n retrieveResult: TRetrieveSuccessResult;\n /** Array of retrieve success results from service calls (intermediate results, not final) */\n serviceIntermediateResult: TServiceRetrieveResults;\n}\n\n/**\n * Context passed to success callback when mutate IS provided\n */\nexport interface TxSuccessContextWithMutate<\n TRetrieveSuccessResult,\n TMutateResult,\n TServiceFinalResults extends readonly unknown[],\n TServiceRetrieveResults extends readonly unknown[],\n> {\n /** Result from retrieveSuccess callback (or raw retrieve results if no retrieveSuccess) */\n retrieveResult: TRetrieveSuccessResult;\n /** Result from mutate callback */\n mutateResult: TMutateResult;\n /** Array of final results from service calls */\n serviceResult: TServiceFinalResults;\n /** Array of retrieve success results from service calls (same as what mutate receives) */\n serviceIntermediateResult: TServiceRetrieveResults;\n}\n\n/**\n * Context passed to success callback when mutate is NOT provided\n */\nexport interface TxSuccessContextWithoutMutate<\n TRetrieveSuccessResult,\n TServiceFinalResults extends readonly unknown[],\n TServiceRetrieveResults extends readonly unknown[],\n> {\n /** Result from retrieveSuccess callback (or raw retrieve results if no retrieveSuccess) */\n retrieveResult: TRetrieveSuccessResult;\n /** No mutate callback was provided */\n mutateResult: undefined;\n /** Array of final results from service calls */\n serviceResult: TServiceFinalResults;\n /** Array of retrieve success results from service calls (same as what mutate receives) */\n serviceIntermediateResult: TServiceRetrieveResults;\n}\n\n/**\n * Context passed to success callback.\n * Union of TxSuccessContextWithMutate and TxSuccessContextWithoutMutate to handle\n * both cases in a single callback signature.\n */\nexport type TxSuccessContext<\n TRetrieveSuccessResult,\n TMutateResult,\n TServiceFinalResults extends readonly unknown[],\n TServiceRetrieveResults extends readonly unknown[] = readonly unknown[],\n> =\n | TxSuccessContextWithMutate<\n TRetrieveSuccessResult,\n TMutateResult,\n TServiceFinalResults,\n TServiceRetrieveResults\n >\n | TxSuccessContextWithoutMutate<\n TRetrieveSuccessResult,\n TServiceFinalResults,\n TServiceRetrieveResults\n >;\n\n/**\n * Callbacks for service-level TxResult.\n *\n * Return type priority:\n * 1. If success exists: ReturnType<success>\n * 2. Else if mutate exists: ReturnType<mutate>\n * 3. Else if retrieveSuccess exists: ReturnType<retrieveSuccess>\n * 4. Else if retrieve exists: TRetrieveResults\n * 5. Else: serviceResult array type\n */\nexport interface ServiceTxCallbacks<\n TSchema extends AnySchema,\n TRetrieveResults extends unknown[],\n TRetrieveSuccessResult,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n TServiceCalls extends readonly (TxResult<any, any> | undefined)[],\n TMutateResult,\n TSuccessResult,\n THooks extends HooksMap,\n> {\n /**\n * Service calls - other TxResults to execute first.\n */\n serviceCalls?: () => TServiceCalls;\n\n /**\n * Retrieval phase callback - schedules retrieval operations.\n */\n retrieve?: (\n uow: TypedUnitOfWork<TSchema, [], unknown, THooks>,\n ) => TypedUnitOfWork<TSchema, TRetrieveResults, unknown, THooks>;\n\n /**\n * Transform retrieve results before passing to mutate.\n */\n retrieveSuccess?: (\n retrieveResult: TRetrieveResults,\n serviceResult: ExtractServiceRetrieveResults<TServiceCalls>,\n ) => TRetrieveSuccessResult;\n\n /**\n * Mutation phase callback - schedules mutations based on retrieve results.\n */\n mutate?: (\n ctx: ServiceTxMutateContext<\n TSchema,\n TRetrieveSuccessResult,\n ExtractServiceRetrieveResults<TServiceCalls>,\n THooks\n >,\n ) => TMutateResult;\n\n /**\n * Success callback - final transformation after mutations complete.\n */\n success?: (\n ctx: TxSuccessContext<\n TRetrieveSuccessResult,\n TMutateResult,\n ExtractServiceFinalResults<TServiceCalls>,\n ExtractServiceRetrieveResults<TServiceCalls>\n >,\n ) => TSuccessResult;\n}\n\n/**\n * Callbacks for handler-level executeTx.\n * Uses context-based callbacks that provide forSchema() method.\n */\nexport interface HandlerTxCallbacks<\n TRetrieveResults extends unknown[],\n TRetrieveSuccessResult,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n TServiceCalls extends readonly (TxResult<any, any> | undefined)[],\n TMutateResult,\n TSuccessResult,\n THooks extends HooksMap,\n> {\n /**\n * Service calls - other TxResults to execute first.\n */\n serviceCalls?: () => TServiceCalls;\n\n /**\n * Retrieval phase callback - schedules retrieval operations using context.forSchema().\n * Return a TypedUnitOfWork to get typed results, or void for no retrieval.\n */\n retrieve?: (\n context: HandlerTxContext<THooks>,\n ) => TypedUnitOfWork<AnySchema, TRetrieveResults, unknown, HooksMap> | void;\n\n /**\n * Transform retrieve results before passing to mutate.\n */\n retrieveSuccess?: (\n retrieveResult: TRetrieveResults,\n serviceResult: ExtractServiceRetrieveResults<TServiceCalls>,\n ) => TRetrieveSuccessResult;\n\n /**\n * Mutation phase callback - schedules mutations based on retrieve results.\n */\n mutate?: (\n ctx: HandlerTxMutateContext<\n TRetrieveSuccessResult,\n ExtractServiceRetrieveResults<TServiceCalls>,\n THooks\n >,\n ) => TMutateResult;\n\n /**\n * Success callback - final transformation after mutations complete.\n */\n success?: (\n ctx: TxSuccessContext<\n TRetrieveSuccessResult,\n TMutateResult,\n ExtractServiceFinalResults<TServiceCalls>,\n ExtractServiceRetrieveResults<TServiceCalls>\n >,\n ) => TSuccessResult;\n}\n\n/**\n * Internal structure storing TxResult callbacks and state.\n */\ninterface TxResultInternal<\n TSchema extends AnySchema,\n TRetrieveResults extends unknown[],\n TRetrieveSuccessResult,\n TServiceCalls extends readonly (TxResult<unknown> | undefined)[],\n TMutateResult,\n TSuccessResult,\n THooks extends HooksMap,\n> {\n schema: TSchema | undefined;\n callbacks: ServiceTxCallbacks<\n TSchema,\n TRetrieveResults,\n TRetrieveSuccessResult,\n TServiceCalls,\n TMutateResult,\n TSuccessResult,\n THooks\n >;\n /** The typed UOW created during retrieve callback */\n typedUow: TypedUnitOfWork<TSchema, TRetrieveResults, unknown, THooks> | undefined;\n /** The restricted UOW for signaling (used when typedUow is undefined) */\n restrictedUow: IUnitOfWork;\n /** Promise that resolves when retrieve phase is complete */\n retrievePhase: Promise<TRetrieveResults>;\n /** Resolve function for retrievePhase */\n resolveRetrievePhase: (results: TRetrieveResults) => void;\n /** Reject function for retrievePhase */\n rejectRetrievePhase: (error: unknown) => void;\n /** Computed retrieve success result (set after retrieveSuccess runs) */\n retrieveSuccessResult: TRetrieveSuccessResult | undefined;\n /** Computed mutate result (set after mutate runs) */\n mutateResult: TMutateResult | undefined;\n /** Computed final result (set after success runs or defaults) */\n finalResult: TSuccessResult | undefined;\n /** Service calls resolved */\n serviceCalls: TServiceCalls | undefined;\n}\n\n/**\n * TxResult represents a transaction definition (not yet executed).\n * It describes the work to be done: retrieve operations, transformations, and mutations.\n *\n * Service methods return TxResult objects, and the handler's executeTx function\n * orchestrates their execution with retry support.\n *\n * @template TResult - The final result type (determined by return type priority)\n * @template TRetrieveSuccessResult - The retrieve success result type (what serviceCalls receive).\n * Defaults to TResult, meaning serviceCalls receive the same type as the final result.\n */\nexport interface TxResult<TResult, TRetrieveSuccessResult = TResult> {\n /** Brand to identify TxResult objects */\n readonly [TX_RESULT_BRAND]: true;\n\n /** Internal structure - do not access directly */\n readonly _internal: TxResultInternal<\n AnySchema,\n unknown[],\n TRetrieveSuccessResult,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n readonly TxResult<any, any>[],\n unknown,\n TResult,\n HooksMap\n >;\n}\n\n/**\n * Create a TxResult for service context.\n * Schedules retrieve operations on the baseUow and returns a TxResult with callbacks stored.\n * @internal Used by ServiceTxBuilder.build()\n */\nfunction createServiceTx<\n TSchema extends AnySchema,\n TRetrieveResults extends unknown[],\n TRetrieveSuccessResult,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n TServiceCalls extends readonly (TxResult<any, any> | undefined)[],\n TMutateResult,\n TSuccessResult,\n THooks extends HooksMap = {},\n>(\n schema: TSchema | undefined,\n callbacks: ServiceTxCallbacks<\n TSchema,\n TRetrieveResults,\n TRetrieveSuccessResult,\n TServiceCalls,\n TMutateResult,\n TSuccessResult,\n THooks\n >,\n baseUow: IUnitOfWork,\n): TxResult<unknown, unknown> {\n // Create deferred promise for retrieve phase\n const {\n promise: retrievePhase,\n resolve: resolveRetrievePhase,\n reject: rejectRetrievePhase,\n } = Promise.withResolvers<TRetrieveResults>();\n\n // Get a restricted view that signals readiness\n const restrictedUow = baseUow.restrict({ readyFor: \"none\" });\n\n // Call serviceCalls factory if provided - this invokes other services which schedule their operations\n let serviceCalls: TServiceCalls | undefined;\n try {\n if (callbacks.serviceCalls) {\n serviceCalls = callbacks.serviceCalls();\n }\n } catch (error) {\n restrictedUow.signalReadyForRetrieval();\n restrictedUow.signalReadyForMutation();\n retrievePhase.catch(() => {});\n rejectRetrievePhase(error);\n throw error;\n }\n let typedUow: TypedUnitOfWork<TSchema, TRetrieveResults, unknown, THooks> | undefined;\n try {\n if (schema && callbacks.retrieve) {\n const emptyUow = restrictedUow.forSchema<TSchema, THooks>(schema);\n typedUow = callbacks.retrieve(emptyUow);\n }\n } catch (error) {\n restrictedUow.signalReadyForRetrieval();\n restrictedUow.signalReadyForMutation();\n retrievePhase.catch(() => {});\n rejectRetrievePhase(error);\n throw error;\n }\n restrictedUow.signalReadyForRetrieval();\n\n // Set up the retrieve phase promise to resolve when the handler executes retrieve\n if (typedUow) {\n typedUow.retrievalPhase.then(\n (results) => resolveRetrievePhase(results as TRetrieveResults),\n (error) => rejectRetrievePhase(error),\n );\n } else if (!callbacks.retrieve) {\n // No retrieve callback - resolve immediately with empty array\n resolveRetrievePhase([] as unknown as TRetrieveResults);\n }\n\n const internal: TxResultInternal<\n TSchema,\n TRetrieveResults,\n TRetrieveSuccessResult,\n TServiceCalls,\n TMutateResult,\n TSuccessResult,\n THooks\n > = {\n schema,\n callbacks,\n typedUow,\n restrictedUow,\n retrievePhase,\n resolveRetrievePhase,\n rejectRetrievePhase,\n retrieveSuccessResult: undefined,\n mutateResult: undefined,\n finalResult: undefined,\n serviceCalls,\n };\n\n return {\n [TX_RESULT_BRAND]: true as const,\n // Cast through unknown to avoid type incompatibility issues with generic constraints\n _internal: internal as unknown as TxResultInternal<\n AnySchema,\n unknown[],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n any,\n readonly TxResult<unknown>[],\n unknown,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n any,\n HooksMap\n >,\n };\n}\n\n/**\n * Options for executing transactions\n */\nexport interface ExecuteTxOptions {\n /**\n * Factory function that creates or resets a UOW instance for each attempt\n */\n createUnitOfWork: () => IUnitOfWork;\n\n /**\n * Retry policy for handling optimistic concurrency conflicts\n */\n retryPolicy?: RetryPolicy;\n\n /**\n * Abort signal to cancel execution\n */\n signal?: AbortSignal;\n\n /**\n * Callback invoked before mutations are executed.\n * Use this to add additional mutation operations (e.g., hook event records).\n */\n onBeforeMutate?: (uow: IUnitOfWork) => void;\n\n /**\n * Callback invoked after successful mutation phase.\n * Use this for post-mutation processing like hook execution.\n */\n onAfterMutate?: (uow: IUnitOfWork) => Promise<void>;\n}\n\n/**\n * Recursively collect all TxResults from a service call tree.\n * Returns them in a flat array in dependency order (serviceCalls before their dependents).\n * Skips undefined values (which can occur with optional service patterns like\n * optionalService?.method()).\n */\nfunction collectAllTxResults(\n txResults: readonly (TxResult<unknown> | undefined)[],\n): TxResult<unknown>[] {\n const collected: TxResult<unknown>[] = [];\n const seen = new Set<TxResult<unknown>>();\n\n function collect(txResult: TxResult<unknown> | undefined) {\n if (txResult === undefined) {\n return;\n }\n\n if (seen.has(txResult)) {\n return;\n }\n seen.add(txResult);\n\n // First collect serviceCalls (so they come before this TxResult)\n const serviceCalls = txResult._internal.serviceCalls;\n if (serviceCalls) {\n for (const serviceCall of serviceCalls) {\n collect(serviceCall);\n }\n }\n\n collected.push(txResult);\n }\n\n for (const txResult of txResults) {\n collect(txResult);\n }\n\n return collected;\n}\n\n/**\n * Execute a single TxResult's callbacks after retrieve phase completes.\n * This processes retrieveSuccess, mutate, and success callbacks in order.\n */\nasync function processTxResultAfterRetrieve<T>(\n txResult: TxResult<T>,\n baseUow: IUnitOfWork,\n): Promise<void> {\n const internal = txResult._internal;\n const callbacks = internal.callbacks;\n\n // Wait for retrieve phase to complete\n const retrieveResults = await internal.retrievePhase;\n\n // Collect serviceCalls' retrieve success results (or mutate results if no retrieve was provided)\n // When a serviceCall has no retrieve/retrieveSuccess but has mutate, its mutate has already run\n // (due to service call execution order), so we use its mutate result as the \"retrieve success result\".\n const serviceResults: unknown[] = [];\n if (internal.serviceCalls) {\n for (const serviceCall of internal.serviceCalls) {\n if (serviceCall === undefined) {\n serviceResults.push(undefined);\n continue;\n }\n\n const serviceCallInternal = serviceCall._internal;\n // Check if this is a mutate-only service call (empty array sentinel with mutate callback)\n // In that case, prefer mutateResult over the empty array retrieveSuccessResult\n if (\n serviceCallInternal.retrieveSuccessResult !== undefined &&\n !(\n Array.isArray(serviceCallInternal.retrieveSuccessResult) &&\n serviceCallInternal.retrieveSuccessResult.length === 0 &&\n serviceCallInternal.callbacks.mutate\n )\n ) {\n serviceResults.push(serviceCallInternal.retrieveSuccessResult);\n } else if (serviceCallInternal.mutateResult !== undefined) {\n serviceResults.push(serviceCallInternal.mutateResult);\n } else {\n serviceResults.push(serviceCallInternal.retrieveSuccessResult);\n }\n }\n }\n\n if (callbacks.retrieveSuccess) {\n internal.retrieveSuccessResult = callbacks.retrieveSuccess(\n retrieveResults,\n serviceResults as ExtractServiceRetrieveResults<readonly TxResult<unknown>[]>,\n );\n } else {\n internal.retrieveSuccessResult = retrieveResults as typeof internal.retrieveSuccessResult;\n }\n\n if (callbacks.mutate) {\n const mutateCtx = {\n uow: internal.schema\n ? baseUow.forSchema(internal.schema)\n : (undefined as unknown as TypedUnitOfWork<AnySchema, [], unknown, HooksMap>),\n // At this point retrieveSuccessResult has been set (either by retrieveSuccess\n // callback or defaulted to retrieveResults)\n retrieveResult: internal.retrieveSuccessResult as NonNullable<\n typeof internal.retrieveSuccessResult\n >,\n serviceIntermediateResult: serviceResults as ExtractServiceRetrieveResults<\n readonly TxResult<unknown>[]\n >,\n };\n internal.mutateResult = callbacks.mutate(mutateCtx);\n }\n\n if (internal.typedUow) {\n internal.typedUow.signalReadyForMutation();\n } else {\n // For TxResults without retrieve callback, signal via the restricted UOW\n internal.restrictedUow.signalReadyForMutation();\n }\n}\n\n/**\n * Execute a single TxResult's success callback after mutations complete.\n */\nasync function processTxResultAfterMutate<T>(txResult: TxResult<T>): Promise<T> {\n const internal = txResult._internal;\n const callbacks = internal.callbacks;\n\n const serviceIntermediateResults: unknown[] = [];\n const serviceFinalResults: unknown[] = [];\n if (internal.serviceCalls) {\n for (const serviceCall of internal.serviceCalls) {\n if (serviceCall === undefined) {\n serviceIntermediateResults.push(undefined);\n serviceFinalResults.push(undefined);\n continue;\n }\n\n // Mirror the logic from processTxResultAfterRetrieve/executeTx:\n // For mutate-only serviceCalls (no retrieve phase, just mutations), use mutateResult instead of retrieveSuccessResult\n const serviceCallInternal = serviceCall._internal;\n // Check if this is a mutate-only service call (empty array sentinel with mutate callback)\n // In that case, prefer mutateResult over the empty array retrieveSuccessResult\n if (\n serviceCallInternal.retrieveSuccessResult !== undefined &&\n !(\n Array.isArray(serviceCallInternal.retrieveSuccessResult) &&\n serviceCallInternal.retrieveSuccessResult.length === 0 &&\n serviceCallInternal.callbacks.mutate\n )\n ) {\n serviceIntermediateResults.push(serviceCallInternal.retrieveSuccessResult);\n } else if (serviceCallInternal.mutateResult !== undefined) {\n serviceIntermediateResults.push(serviceCallInternal.mutateResult);\n } else {\n serviceIntermediateResults.push(serviceCallInternal.retrieveSuccessResult);\n }\n serviceFinalResults.push(serviceCallInternal.finalResult);\n }\n }\n\n if (callbacks.success) {\n const successCtx = {\n retrieveResult: internal.retrieveSuccessResult as NonNullable<\n typeof internal.retrieveSuccessResult\n >,\n mutateResult: internal.mutateResult,\n serviceResult: serviceFinalResults as ExtractServiceFinalResults<\n readonly TxResult<unknown>[]\n >,\n serviceIntermediateResult: serviceIntermediateResults as ExtractServiceRetrieveResults<\n readonly TxResult<unknown>[]\n >,\n };\n internal.finalResult = callbacks.success(successCtx) as T;\n } else if (callbacks.mutate) {\n internal.finalResult = (await awaitPromisesInObject(internal.mutateResult)) as T;\n } else if (callbacks.retrieveSuccess || callbacks.retrieve) {\n internal.finalResult = internal.retrieveSuccessResult as T;\n } else {\n internal.finalResult = serviceFinalResults as T;\n }\n\n return internal.finalResult as T;\n}\n\n/**\n * Execute a transaction with the unified TxResult pattern.\n *\n * This is the handler-level function that actually executes TxResults with retry support.\n *\n * @param callbacks - Transaction callbacks (serviceCalls, retrieve, retrieveSuccess, mutate, success)\n * @param options - Configuration including UOW factory, retry policy, and abort signal\n * @returns Promise resolving to the result determined by return type priority\n *\n * @example\n * ```ts\n * // Simple retrieve + transform\n * const user = await executeTx({\n * retrieve: (ctx) => ctx.forSchema(usersSchema).find(\"users\", ...),\n * retrieveSuccess: ([users]) => users[0] ?? null,\n * }, { createUnitOfWork });\n * @internal Used by HandlerTxBuilder.execute()\n */\nasync function executeTx(\n callbacks: HandlerTxCallbacks<\n unknown[],\n unknown,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n readonly (TxResult<any, any> | undefined)[],\n unknown,\n unknown,\n HooksMap\n >,\n options: ExecuteTxOptions,\n): Promise<unknown> {\n type TRetrieveResults = unknown[];\n type TRetrieveSuccessResult = unknown;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n type TServiceCalls = readonly (TxResult<any, any> | undefined)[];\n type TMutateResult = unknown;\n type THooks = HooksMap;\n const retryPolicy =\n options.retryPolicy ??\n new ExponentialBackoffRetryPolicy({\n maxRetries: 5,\n initialDelayMs: 10,\n maxDelayMs: 100,\n });\n const signal = options.signal;\n let attempt = 0;\n\n while (true) {\n // Check if aborted before starting attempt\n if (signal?.aborted) {\n throw new Error(\"Transaction execution aborted\");\n }\n\n try {\n // Create a fresh UOW for this attempt\n const baseUow = options.createUnitOfWork();\n\n // Create handler context\n const context: HandlerTxContext<THooks> = {\n forSchema: <S extends AnySchema, H extends HooksMap = THooks>(schema: S, hooks?: H) => {\n return baseUow.forSchema(schema, hooks);\n },\n idempotencyKey: baseUow.idempotencyKey,\n currentAttempt: attempt,\n };\n\n // Call serviceCalls factory if provided - this creates TxResults that schedule operations\n let serviceCalls: TServiceCalls | undefined;\n if (callbacks.serviceCalls) {\n serviceCalls = callbacks.serviceCalls();\n }\n\n // Call retrieve callback - it returns a TypedUnitOfWork with scheduled operations or void\n const typedUowFromRetrieve = callbacks.retrieve?.(context);\n\n const allServiceCallTxResults = serviceCalls ? collectAllTxResults([...serviceCalls]) : [];\n\n await baseUow.executeRetrieve();\n\n // Get retrieve results from TypedUnitOfWork's retrievalPhase or default to empty array\n const retrieveResult: TRetrieveResults = typedUowFromRetrieve\n ? await typedUowFromRetrieve.retrievalPhase\n : ([] as unknown as TRetrieveResults);\n\n for (const txResult of allServiceCallTxResults) {\n await processTxResultAfterRetrieve(txResult, baseUow);\n }\n\n const serviceResults: unknown[] = [];\n if (serviceCalls) {\n for (const serviceCall of serviceCalls) {\n if (serviceCall === undefined) {\n serviceResults.push(undefined);\n continue;\n }\n const serviceCallInternal = serviceCall._internal;\n // Check if this is a mutate-only service call (empty array sentinel with mutate callback)\n // In that case, prefer mutateResult over the empty array retrieveSuccessResult\n if (\n serviceCallInternal.retrieveSuccessResult !== undefined &&\n !(\n Array.isArray(serviceCallInternal.retrieveSuccessResult) &&\n serviceCallInternal.retrieveSuccessResult.length === 0 &&\n serviceCallInternal.callbacks.mutate\n )\n ) {\n serviceResults.push(serviceCallInternal.retrieveSuccessResult);\n } else if (serviceCallInternal.mutateResult !== undefined) {\n serviceResults.push(serviceCallInternal.mutateResult);\n } else {\n serviceResults.push(serviceCallInternal.retrieveSuccessResult);\n }\n }\n }\n\n // Call retrieveSuccess if provided\n let retrieveSuccessResult: TRetrieveSuccessResult;\n if (callbacks.retrieveSuccess) {\n retrieveSuccessResult = callbacks.retrieveSuccess(\n retrieveResult,\n serviceResults as ExtractServiceRetrieveResults<TServiceCalls>,\n );\n } else {\n retrieveSuccessResult = retrieveResult as unknown as TRetrieveSuccessResult;\n }\n\n let mutateResult: TMutateResult | undefined;\n if (callbacks.mutate) {\n const mutateCtx: HandlerTxMutateContext<\n TRetrieveSuccessResult,\n ExtractServiceRetrieveResults<TServiceCalls>,\n THooks\n > = {\n ...context,\n retrieveResult: retrieveSuccessResult,\n serviceIntermediateResult: serviceResults as ExtractServiceRetrieveResults<TServiceCalls>,\n };\n mutateResult = callbacks.mutate(mutateCtx);\n }\n\n if (options.onBeforeMutate) {\n options.onBeforeMutate(baseUow);\n }\n const result = await baseUow.executeMutations();\n if (!result.success) {\n throw new ConcurrencyConflictError();\n }\n\n // Process each serviceCall TxResult's success callback\n for (const txResult of allServiceCallTxResults) {\n await processTxResultAfterMutate(txResult);\n }\n\n const serviceFinalResults: unknown[] = [];\n if (serviceCalls) {\n for (const serviceCall of serviceCalls) {\n if (serviceCall === undefined) {\n serviceFinalResults.push(undefined);\n continue;\n }\n serviceFinalResults.push(serviceCall._internal.finalResult);\n }\n }\n\n let finalResult: unknown;\n if (callbacks.success) {\n // The success context type is determined by the overload - we construct it at runtime\n // and the type safety is guaranteed by the discriminated overloads\n const successCtx = {\n retrieveResult: retrieveSuccessResult,\n mutateResult,\n serviceResult: serviceFinalResults as ExtractServiceFinalResults<TServiceCalls>,\n serviceIntermediateResult: serviceResults as ExtractServiceRetrieveResults<TServiceCalls>,\n } as Parameters<NonNullable<typeof callbacks.success>>[0];\n finalResult = callbacks.success(successCtx);\n } else if (callbacks.mutate) {\n finalResult = await awaitPromisesInObject(mutateResult);\n } else if (callbacks.retrieveSuccess || callbacks.retrieve) {\n finalResult = retrieveSuccessResult;\n } else {\n finalResult = serviceFinalResults;\n }\n\n if (options.onAfterMutate) {\n await options.onAfterMutate(baseUow);\n }\n\n return await awaitPromisesInObject(finalResult);\n } catch (error) {\n if (signal?.aborted) {\n throw new Error(\"Transaction execution aborted\");\n }\n\n // Only retry concurrency conflicts, not other errors\n if (!(error instanceof ConcurrencyConflictError)) {\n throw error;\n }\n\n if (!retryPolicy.shouldRetry(attempt, error, signal)) {\n if (signal?.aborted) {\n throw new Error(\"Transaction execution aborted\");\n }\n throw new ConcurrencyConflictError();\n }\n\n const delayMs = retryPolicy.getDelayMs(attempt);\n if (delayMs > 0) {\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n }\n\n attempt++;\n }\n }\n}\n\n/**\n * Error thrown when a Unit of Work execution fails due to optimistic concurrency conflict.\n * This error triggers automatic retry behavior in executeTx.\n */\nexport class ConcurrencyConflictError extends Error {\n constructor(message = \"Optimistic concurrency conflict detected\") {\n super(message);\n this.name = \"ConcurrencyConflictError\";\n }\n}\n\n/**\n * Type utility that unwraps promises 1 level deep in objects, arrays, or direct promises\n * Handles tuples, arrays, objects, and direct promises\n */\nexport type AwaitedPromisesInObject<T> =\n // First check if it's a Promise\n T extends Promise<infer U>\n ? Awaited<U>\n : // Check for arrays with known length (tuples) - preserves tuple structure\n T extends readonly [unknown, ...unknown[]]\n ? { [K in keyof T]: AwaitedPromisesInObject<T[K]> }\n : T extends [unknown, ...unknown[]]\n ? { [K in keyof T]: AwaitedPromisesInObject<T[K]> }\n : // Check for regular arrays (unknown length)\n T extends (infer U)[]\n ? Awaited<U>[]\n : T extends readonly (infer U)[]\n ? readonly Awaited<U>[]\n : // Check for objects\n T extends Record<string, unknown>\n ? {\n [K in keyof T]: T[K] extends Promise<infer U> ? Awaited<U> : T[K];\n }\n : // Otherwise return as-is\n T;\n\n/**\n * Await promises in an object 1 level deep\n */\nasync function awaitPromisesInObject<T>(obj: T): Promise<AwaitedPromisesInObject<T>> {\n if (obj === null || obj === undefined) {\n return obj as AwaitedPromisesInObject<T>;\n }\n\n if (typeof obj !== \"object\") {\n return obj as AwaitedPromisesInObject<T>;\n }\n\n // Check if it's a Promise\n if (obj instanceof Promise) {\n return (await obj) as AwaitedPromisesInObject<T>;\n }\n\n // Check if it's an array\n if (Array.isArray(obj)) {\n const awaited = await Promise.all(\n obj.map((item) => (item instanceof Promise ? item : Promise.resolve(item))),\n );\n return awaited as AwaitedPromisesInObject<T>;\n }\n\n if (obj.constructor !== Object) {\n return obj as AwaitedPromisesInObject<T>;\n }\n const result = {} as T;\n const entries = Object.entries(obj as Record<string, unknown>);\n const awaitedEntries = await Promise.all(\n entries.map(async ([key, value]) => {\n const awaitedValue = value instanceof Promise ? await value : value;\n return [key, awaitedValue] as const;\n }),\n );\n\n for (const [key, value] of awaitedEntries) {\n (result as Record<string, unknown>)[key] = value;\n }\n\n return result as AwaitedPromisesInObject<T>;\n}\n\n// ============================================================================\n// Builder Pattern Types and Classes\n// ============================================================================\n\n/**\n * Context passed to service-level mutate callback in builder pattern.\n */\nexport interface ServiceBuilderMutateContext<\n TSchema extends AnySchema,\n TRetrieveSuccessResult,\n TServiceResult extends readonly unknown[],\n THooks extends HooksMap,\n> {\n /** Unit of work for scheduling mutations */\n uow: TypedUnitOfWork<TSchema, [], unknown, THooks>;\n /** Result from transformRetrieve callback (or raw retrieve results if no transformRetrieve) */\n retrieveResult: TRetrieveSuccessResult;\n /** Array of retrieve success results from service calls (intermediate results, not final: retrieve results if service has retrieve, mutate result if service only mutates) */\n serviceIntermediateResult: TServiceResult;\n}\n\n/**\n * Context passed to handler-level mutate callback in builder pattern.\n */\nexport interface HandlerBuilderMutateContext<\n TRetrieveSuccessResult,\n TServiceResult extends readonly unknown[],\n THooks extends HooksMap,\n> {\n /** Get a typed Unit of Work for the given schema */\n forSchema: <S extends AnySchema, H extends HooksMap = THooks>(\n schema: S,\n hooks?: H,\n ) => TypedUnitOfWork<S, [], unknown, H>;\n /** Unique key for this transaction (for idempotency/deduplication) */\n idempotencyKey: string;\n /** Current attempt number (0-based) */\n currentAttempt: number;\n /** Result from transformRetrieve callback (or raw retrieve results if no transformRetrieve) */\n retrieveResult: TRetrieveSuccessResult;\n /** Array of retrieve success results from service calls (intermediate results, not final: retrieve results if service has retrieve, mutate result if service only mutates) */\n serviceIntermediateResult: TServiceResult;\n}\n\n/**\n * Context passed to transform callback when mutate IS provided.\n */\nexport interface BuilderTransformContextWithMutate<\n TRetrieveSuccessResult,\n TMutateResult,\n TServiceFinalResult extends readonly unknown[],\n TServiceIntermediateResult extends readonly unknown[],\n> {\n /** Result from transformRetrieve callback (or raw retrieve results if no transformRetrieve) */\n retrieveResult: TRetrieveSuccessResult;\n /** Result from mutate callback */\n mutateResult: TMutateResult;\n /** Array of final results from service calls (after success/transform callbacks) */\n serviceResult: TServiceFinalResult;\n /** Array of retrieve success results from service calls (same as what mutate receives: retrieve results if service has retrieve, mutate result if service only mutates) */\n serviceIntermediateResult: TServiceIntermediateResult;\n}\n\n/**\n * Context passed to transform callback when mutate is NOT provided.\n */\nexport interface BuilderTransformContextWithoutMutate<\n TRetrieveSuccessResult,\n TServiceFinalResult extends readonly unknown[],\n TServiceIntermediateResult extends readonly unknown[],\n> {\n /** Result from transformRetrieve callback (or raw retrieve results if no transformRetrieve) */\n retrieveResult: TRetrieveSuccessResult;\n /** No mutate callback was provided */\n mutateResult: undefined;\n /** Array of final results from service calls (after success/transform callbacks) */\n serviceResult: TServiceFinalResult;\n /** Array of retrieve success results from service calls (same as what mutate receives: retrieve results if service has retrieve, mutate result if service only mutates) */\n serviceIntermediateResult: TServiceIntermediateResult;\n}\n\n/**\n * Infer the final result type from builder state:\n * 1. transform → TTransformResult\n * 2. mutate → AwaitedPromisesInObject<TMutateResult>\n * 3. transformRetrieve → TRetrieveSuccessResult\n * 4. retrieve → TRetrieveResults\n * 5. withServiceCalls → ExtractServiceFinalResults<TServiceCalls>\n */\nexport type InferBuilderResultType<\n TRetrieveResults extends unknown[],\n TRetrieveSuccessResult,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n TServiceCalls extends readonly (TxResult<any, any> | undefined)[],\n TMutateResult,\n TTransformResult,\n HasTransform extends boolean,\n HasMutate extends boolean,\n HasTransformRetrieve extends boolean,\n HasRetrieve extends boolean,\n> = HasTransform extends true\n ? TTransformResult\n : HasMutate extends true\n ? AwaitedPromisesInObject<TMutateResult>\n : HasTransformRetrieve extends true\n ? TRetrieveSuccessResult\n : HasRetrieve extends true\n ? TRetrieveResults\n : ExtractServiceFinalResults<TServiceCalls>;\n\n/**\n * Infer the retrieve success result type for the builder:\n * - If transformRetrieve exists: TRetrieveSuccessResult\n * - Else if retrieve exists: TRetrieveResults (raw retrieve results)\n * - Else if mutate exists: AwaitedPromisesInObject<TMutateResult>\n * (mutate result becomes retrieve result for dependents)\n * - Else: TRetrieveResults (raw retrieve results, typically [])\n */\nexport type InferBuilderRetrieveSuccessResult<\n TRetrieveResults extends unknown[],\n TRetrieveSuccessResult,\n TMutateResult,\n HasTransformRetrieve extends boolean,\n HasRetrieve extends boolean,\n HasMutate extends boolean,\n> = HasTransformRetrieve extends true\n ? TRetrieveSuccessResult\n : HasRetrieve extends true\n ? TRetrieveResults\n : HasMutate extends true\n ? AwaitedPromisesInObject<TMutateResult>\n : TRetrieveResults;\n\n/**\n * Internal state for ServiceTxBuilder\n */\ninterface ServiceTxBuilderState<\n TSchema extends AnySchema,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n TServiceCalls extends readonly (TxResult<any, any> | undefined)[],\n TRetrieveResults extends unknown[],\n TRetrieveSuccessResult,\n TMutateResult,\n TTransformResult,\n THooks extends HooksMap,\n> {\n schema: TSchema;\n baseUow: IUnitOfWork;\n hooks?: THooks;\n withServiceCallsFn?: () => TServiceCalls;\n retrieveFn?: (\n uow: TypedUnitOfWork<TSchema, [], unknown, THooks>,\n ) => TypedUnitOfWork<TSchema, TRetrieveResults, unknown, THooks>;\n transformRetrieveFn?: (\n retrieveResult: TRetrieveResults,\n serviceRetrieveResult: ExtractServiceRetrieveResults<TServiceCalls>,\n ) => TRetrieveSuccessResult;\n mutateFn?: (\n ctx: ServiceBuilderMutateContext<\n TSchema,\n TRetrieveSuccessResult,\n ExtractServiceRetrieveResults<TServiceCalls>,\n THooks\n >,\n ) => TMutateResult;\n transformFn?: (\n ctx:\n | BuilderTransformContextWithMutate<\n TRetrieveSuccessResult,\n TMutateResult,\n ExtractServiceFinalResults<TServiceCalls>,\n ExtractServiceRetrieveResults<TServiceCalls>\n >\n | BuilderTransformContextWithoutMutate<\n TRetrieveSuccessResult,\n ExtractServiceFinalResults<TServiceCalls>,\n ExtractServiceRetrieveResults<TServiceCalls>\n >,\n ) => TTransformResult;\n}\n\n/**\n * Builder for service-level transactions.\n * Uses a fluent API to build up transaction callbacks with proper type inference.\n *\n * @example\n * ```ts\n * return serviceTx(schema)\n * .withServiceCalls(() => [otherService.getData()])\n * .retrieve((uow) => uow.find(\"users\", ...))\n * .transformRetrieve(([users], serviceResult) => users[0])\n * .mutate(({ uow, retrieveResult, serviceIntermediateResult }) =>\n * uow.create(\"records\", { ... })\n * )\n * .transform(({ mutateResult, serviceResult, serviceIntermediateResult }) => ({ id: mutateResult }))\n * .build();\n * ```\n */\nexport class ServiceTxBuilder<\n TSchema extends AnySchema,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n TServiceCalls extends readonly (TxResult<any, any> | undefined)[],\n TRetrieveResults extends unknown[],\n TRetrieveSuccessResult,\n TMutateResult,\n TTransformResult,\n HasRetrieve extends boolean,\n HasTransformRetrieve extends boolean,\n HasMutate extends boolean,\n HasTransform extends boolean,\n THooks extends HooksMap,\n> {\n readonly #state: ServiceTxBuilderState<\n TSchema,\n TServiceCalls,\n TRetrieveResults,\n TRetrieveSuccessResult,\n TMutateResult,\n TTransformResult,\n THooks\n >;\n\n constructor(\n state: ServiceTxBuilderState<\n TSchema,\n TServiceCalls,\n TRetrieveResults,\n TRetrieveSuccessResult,\n TMutateResult,\n TTransformResult,\n THooks\n >,\n ) {\n this.#state = state;\n }\n\n /**\n * Add dependencies to execute before this transaction.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n withServiceCalls<TNewDeps extends readonly (TxResult<any, any> | undefined)[]>(\n fn: () => TNewDeps,\n ): ServiceTxBuilder<\n TSchema,\n TNewDeps,\n TRetrieveResults,\n TRetrieveSuccessResult,\n TMutateResult,\n TTransformResult,\n HasRetrieve,\n HasTransformRetrieve,\n HasMutate,\n HasTransform,\n THooks\n > {\n return new ServiceTxBuilder({\n ...this.#state,\n withServiceCallsFn: fn,\n } as ServiceTxBuilderState<\n TSchema,\n TNewDeps,\n TRetrieveResults,\n TRetrieveSuccessResult,\n TMutateResult,\n TTransformResult,\n THooks\n >);\n }\n\n /**\n * Add retrieval operations to the transaction.\n */\n retrieve<TNewRetrieveResults extends unknown[]>(\n fn: (\n uow: TypedUnitOfWork<TSchema, [], unknown, THooks>,\n ) => TypedUnitOfWork<TSchema, TNewRetrieveResults, unknown, THooks>,\n ): ServiceTxBuilder<\n TSchema,\n TServiceCalls,\n TNewRetrieveResults,\n TNewRetrieveResults, // Default TRetrieveSuccessResult to TNewRetrieveResults\n TMutateResult,\n TTransformResult,\n true, // HasRetrieve = true\n false, // Reset HasTransformRetrieve since retrieve results changed\n HasMutate,\n HasTransform,\n THooks\n > {\n return new ServiceTxBuilder({\n ...this.#state,\n retrieveFn: fn,\n transformRetrieveFn: undefined, // Clear any existing transformRetrieve since results shape changed\n } as unknown as ServiceTxBuilderState<\n TSchema,\n TServiceCalls,\n TNewRetrieveResults,\n TNewRetrieveResults,\n TMutateResult,\n TTransformResult,\n THooks\n >);\n }\n\n /**\n * Transform retrieve results before passing to mutate.\n */\n transformRetrieve<TNewRetrieveSuccessResult>(\n fn: (\n retrieveResult: TRetrieveResults,\n serviceResult: ExtractServiceRetrieveResults<TServiceCalls>,\n ) => TNewRetrieveSuccessResult,\n ): ServiceTxBuilder<\n TSchema,\n TServiceCalls,\n TRetrieveResults,\n TNewRetrieveSuccessResult,\n TMutateResult,\n TTransformResult,\n HasRetrieve,\n true, // HasTransformRetrieve = true\n HasMutate,\n HasTransform,\n THooks\n > {\n return new ServiceTxBuilder({\n ...this.#state,\n transformRetrieveFn: fn,\n } as unknown as ServiceTxBuilderState<\n TSchema,\n TServiceCalls,\n TRetrieveResults,\n TNewRetrieveSuccessResult,\n TMutateResult,\n TTransformResult,\n THooks\n >);\n }\n\n /**\n * Add mutation operations based on retrieve results.\n */\n mutate<TNewMutateResult>(\n fn: (\n ctx: ServiceBuilderMutateContext<\n TSchema,\n HasTransformRetrieve extends true ? TRetrieveSuccessResult : TRetrieveResults,\n ExtractServiceRetrieveResults<TServiceCalls>,\n THooks\n >,\n ) => TNewMutateResult,\n ): ServiceTxBuilder<\n TSchema,\n TServiceCalls,\n TRetrieveResults,\n HasTransformRetrieve extends true ? TRetrieveSuccessResult : TRetrieveResults,\n TNewMutateResult,\n TTransformResult,\n HasRetrieve,\n HasTransformRetrieve,\n true, // HasMutate = true\n HasTransform,\n THooks\n > {\n return new ServiceTxBuilder({\n ...this.#state,\n mutateFn: fn,\n } as unknown as ServiceTxBuilderState<\n TSchema,\n TServiceCalls,\n TRetrieveResults,\n HasTransformRetrieve extends true ? TRetrieveSuccessResult : TRetrieveResults,\n TNewMutateResult,\n TTransformResult,\n THooks\n >);\n }\n\n /**\n * Add final transformation after mutations complete.\n */\n transform<TNewTransformResult>(\n fn: (\n ctx: HasMutate extends true\n ? BuilderTransformContextWithMutate<\n HasTransformRetrieve extends true ? TRetrieveSuccessResult : TRetrieveResults,\n TMutateResult,\n ExtractServiceFinalResults<TServiceCalls>,\n ExtractServiceRetrieveResults<TServiceCalls>\n >\n : BuilderTransformContextWithoutMutate<\n HasTransformRetrieve extends true ? TRetrieveSuccessResult : TRetrieveResults,\n ExtractServiceFinalResults<TServiceCalls>,\n ExtractServiceRetrieveResults<TServiceCalls>\n >,\n ) => TNewTransformResult,\n ): ServiceTxBuilder<\n TSchema,\n TServiceCalls,\n TRetrieveResults,\n HasTransformRetrieve extends true ? TRetrieveSuccessResult : TRetrieveResults,\n TMutateResult,\n TNewTransformResult,\n HasRetrieve,\n HasTransformRetrieve,\n HasMutate,\n true, // HasTransform = true\n THooks\n > {\n return new ServiceTxBuilder({\n ...this.#state,\n transformFn: fn,\n } as unknown as ServiceTxBuilderState<\n TSchema,\n TServiceCalls,\n TRetrieveResults,\n HasTransformRetrieve extends true ? TRetrieveSuccessResult : TRetrieveResults,\n TMutateResult,\n TNewTransformResult,\n THooks\n >);\n }\n\n /**\n * Build and return the TxResult.\n */\n build(): TxResult<\n InferBuilderResultType<\n TRetrieveResults,\n TRetrieveSuccessResult,\n TServiceCalls,\n TMutateResult,\n TTransformResult,\n HasTransform,\n HasMutate,\n HasTransformRetrieve,\n HasRetrieve\n >,\n InferBuilderRetrieveSuccessResult<\n TRetrieveResults,\n TRetrieveSuccessResult,\n TMutateResult,\n HasTransformRetrieve,\n HasRetrieve,\n HasMutate\n >\n > {\n const state = this.#state;\n\n // Convert builder state to legacy callbacks format\n const callbacks: ServiceTxCallbacks<\n TSchema,\n TRetrieveResults,\n TRetrieveSuccessResult,\n TServiceCalls,\n TMutateResult,\n TTransformResult,\n THooks\n > = {\n serviceCalls: state.withServiceCallsFn,\n retrieve: state.retrieveFn,\n retrieveSuccess: state.transformRetrieveFn,\n mutate: state.mutateFn\n ? (ctx) => {\n return state.mutateFn!({\n uow: ctx.uow,\n retrieveResult: ctx.retrieveResult,\n serviceIntermediateResult: ctx.serviceIntermediateResult,\n });\n }\n : undefined,\n success: state.transformFn\n ? (ctx) => {\n return state.transformFn!({\n retrieveResult: ctx.retrieveResult,\n mutateResult: ctx.mutateResult,\n serviceResult: ctx.serviceResult,\n serviceIntermediateResult: ctx.serviceIntermediateResult,\n } as BuilderTransformContextWithMutate<\n TRetrieveSuccessResult,\n TMutateResult,\n ExtractServiceFinalResults<TServiceCalls>,\n ExtractServiceRetrieveResults<TServiceCalls>\n >);\n }\n : undefined,\n };\n\n // Use the existing createServiceTx implementation\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return createServiceTx(state.schema, callbacks as any, state.baseUow) as unknown as TxResult<\n InferBuilderResultType<\n TRetrieveResults,\n TRetrieveSuccessResult,\n TServiceCalls,\n TMutateResult,\n TTransformResult,\n HasTransform,\n HasMutate,\n HasTransformRetrieve,\n HasRetrieve\n >,\n InferBuilderRetrieveSuccessResult<\n TRetrieveResults,\n TRetrieveSuccessResult,\n TMutateResult,\n HasTransformRetrieve,\n HasRetrieve,\n HasMutate\n >\n >;\n }\n}\n\n/**\n * Create a new ServiceTxBuilder for the given schema.\n */\nexport function createServiceTxBuilder<TSchema extends AnySchema, THooks extends HooksMap = {}>(\n schema: TSchema,\n baseUow: IUnitOfWork,\n hooks?: THooks,\n): ServiceTxBuilder<\n TSchema,\n readonly [],\n [],\n [],\n unknown,\n unknown,\n false,\n false,\n false,\n false,\n THooks\n> {\n return new ServiceTxBuilder({\n schema,\n baseUow,\n hooks,\n });\n}\n\n/**\n * Internal state for HandlerTxBuilder\n */\ninterface HandlerTxBuilderState<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n TServiceCalls extends readonly (TxResult<any, any> | undefined)[],\n TRetrieveResults extends unknown[],\n TRetrieveSuccessResult,\n TMutateResult,\n TTransformResult,\n THooks extends HooksMap,\n> {\n options: ExecuteTxOptions;\n hooks?: THooks;\n withServiceCallsFn?: () => TServiceCalls;\n retrieveFn?: (context: {\n forSchema: <S extends AnySchema, H extends HooksMap = THooks>(\n schema: S,\n hooks?: H,\n ) => TypedUnitOfWork<S, [], unknown, H>;\n idempotencyKey: string;\n currentAttempt: number;\n }) => TypedUnitOfWork<AnySchema, TRetrieveResults, unknown, HooksMap> | void;\n transformRetrieveFn?: (\n retrieveResult: TRetrieveResults,\n serviceResult: ExtractServiceRetrieveResults<TServiceCalls>,\n ) => TRetrieveSuccessResult;\n mutateFn?: (\n ctx: HandlerBuilderMutateContext<\n TRetrieveSuccessResult,\n ExtractServiceRetrieveResults<TServiceCalls>,\n THooks\n >,\n ) => TMutateResult;\n transformFn?: (\n ctx:\n | BuilderTransformContextWithMutate<\n TRetrieveSuccessResult,\n TMutateResult,\n ExtractServiceFinalResults<TServiceCalls>,\n ExtractServiceRetrieveResults<TServiceCalls>\n >\n | BuilderTransformContextWithoutMutate<\n TRetrieveSuccessResult,\n ExtractServiceFinalResults<TServiceCalls>,\n ExtractServiceRetrieveResults<TServiceCalls>\n >,\n ) => TTransformResult;\n}\n\n/**\n * Builder for handler-level transactions.\n * Uses a fluent API to build up transaction callbacks with proper type inference.\n *\n * @example\n * ```ts\n * const result = await handlerTx()\n * .withServiceCalls(() => [userService.getUser(id)])\n * .mutate(({ forSchema, idempotencyKey, currentAttempt, serviceIntermediateResult }) => {\n * return forSchema(ordersSchema).create(\"orders\", { ... });\n * })\n * .transform(({ mutateResult, serviceResult }) => ({ ... }))\n * .execute();\n * ```\n */\nexport class HandlerTxBuilder<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n TServiceCalls extends readonly (TxResult<any, any> | undefined)[],\n TRetrieveResults extends unknown[],\n TRetrieveSuccessResult,\n TMutateResult,\n TTransformResult,\n HasRetrieve extends boolean,\n HasTransformRetrieve extends boolean,\n HasMutate extends boolean,\n HasTransform extends boolean,\n THooks extends HooksMap,\n> {\n readonly #state: HandlerTxBuilderState<\n TServiceCalls,\n TRetrieveResults,\n TRetrieveSuccessResult,\n TMutateResult,\n TTransformResult,\n THooks\n >;\n\n constructor(\n state: HandlerTxBuilderState<\n TServiceCalls,\n TRetrieveResults,\n TRetrieveSuccessResult,\n TMutateResult,\n TTransformResult,\n THooks\n >,\n ) {\n this.#state = state;\n }\n\n /**\n * Add dependencies to execute before this transaction.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n withServiceCalls<TNewDeps extends readonly (TxResult<any, any> | undefined)[]>(\n fn: () => TNewDeps,\n ): HandlerTxBuilder<\n TNewDeps,\n TRetrieveResults,\n TRetrieveSuccessResult,\n TMutateResult,\n TTransformResult,\n HasRetrieve,\n HasTransformRetrieve,\n HasMutate,\n HasTransform,\n THooks\n > {\n return new HandlerTxBuilder({\n ...this.#state,\n withServiceCallsFn: fn,\n } as HandlerTxBuilderState<\n TNewDeps,\n TRetrieveResults,\n TRetrieveSuccessResult,\n TMutateResult,\n TTransformResult,\n THooks\n >);\n }\n\n /**\n * Add retrieval operations to the transaction.\n * Return a TypedUnitOfWork from forSchema().find() to get typed results.\n */\n retrieve<TNewRetrieveResults extends unknown[]>(\n fn: (context: {\n forSchema: <S extends AnySchema, H extends HooksMap = THooks>(\n schema: S,\n hooks?: H,\n ) => TypedUnitOfWork<S, [], unknown, H>;\n idempotencyKey: string;\n currentAttempt: number;\n }) => TypedUnitOfWork<AnySchema, TNewRetrieveResults, unknown, HooksMap> | void,\n ): HandlerTxBuilder<\n TServiceCalls,\n TNewRetrieveResults,\n TNewRetrieveResults, // Default TRetrieveSuccessResult to TNewRetrieveResults\n TMutateResult,\n TTransformResult,\n true, // HasRetrieve = true\n false, // Reset HasTransformRetrieve since retrieve results changed\n HasMutate,\n HasTransform,\n THooks\n > {\n return new HandlerTxBuilder({\n ...this.#state,\n retrieveFn: fn,\n transformRetrieveFn: undefined, // Clear any existing transformRetrieve since results shape changed\n } as unknown as HandlerTxBuilderState<\n TServiceCalls,\n TNewRetrieveResults,\n TNewRetrieveResults,\n TMutateResult,\n TTransformResult,\n THooks\n >);\n }\n\n /**\n * Transform retrieve results before passing to mutate.\n */\n transformRetrieve<TNewRetrieveSuccessResult>(\n fn: (\n retrieveResult: TRetrieveResults,\n serviceResult: ExtractServiceRetrieveResults<TServiceCalls>,\n ) => TNewRetrieveSuccessResult,\n ): HandlerTxBuilder<\n TServiceCalls,\n TRetrieveResults,\n TNewRetrieveSuccessResult,\n TMutateResult,\n TTransformResult,\n HasRetrieve,\n true, // HasTransformRetrieve = true\n HasMutate,\n HasTransform,\n THooks\n > {\n return new HandlerTxBuilder({\n ...this.#state,\n transformRetrieveFn: fn,\n } as unknown as HandlerTxBuilderState<\n TServiceCalls,\n TRetrieveResults,\n TNewRetrieveSuccessResult,\n TMutateResult,\n TTransformResult,\n THooks\n >);\n }\n\n /**\n * Add mutation operations based on retrieve results.\n */\n mutate<TNewMutateResult>(\n fn: (\n ctx: HandlerBuilderMutateContext<\n HasTransformRetrieve extends true ? TRetrieveSuccessResult : TRetrieveResults,\n ExtractServiceRetrieveResults<TServiceCalls>,\n THooks\n >,\n ) => TNewMutateResult,\n ): HandlerTxBuilder<\n TServiceCalls,\n TRetrieveResults,\n HasTransformRetrieve extends true ? TRetrieveSuccessResult : TRetrieveResults,\n TNewMutateResult,\n TTransformResult,\n HasRetrieve,\n HasTransformRetrieve,\n true, // HasMutate = true\n HasTransform,\n THooks\n > {\n return new HandlerTxBuilder({\n ...this.#state,\n mutateFn: fn,\n } as unknown as HandlerTxBuilderState<\n TServiceCalls,\n TRetrieveResults,\n HasTransformRetrieve extends true ? TRetrieveSuccessResult : TRetrieveResults,\n TNewMutateResult,\n TTransformResult,\n THooks\n >);\n }\n\n /**\n * Add final transformation after mutations complete.\n */\n transform<TNewTransformResult>(\n fn: (\n ctx: HasMutate extends true\n ? BuilderTransformContextWithMutate<\n HasTransformRetrieve extends true ? TRetrieveSuccessResult : TRetrieveResults,\n TMutateResult,\n ExtractServiceFinalResults<TServiceCalls>,\n ExtractServiceRetrieveResults<TServiceCalls>\n >\n : BuilderTransformContextWithoutMutate<\n HasTransformRetrieve extends true ? TRetrieveSuccessResult : TRetrieveResults,\n ExtractServiceFinalResults<TServiceCalls>,\n ExtractServiceRetrieveResults<TServiceCalls>\n >,\n ) => TNewTransformResult,\n ): HandlerTxBuilder<\n TServiceCalls,\n TRetrieveResults,\n HasTransformRetrieve extends true ? TRetrieveSuccessResult : TRetrieveResults,\n TMutateResult,\n TNewTransformResult,\n HasRetrieve,\n HasTransformRetrieve,\n HasMutate,\n true, // HasTransform = true\n THooks\n > {\n return new HandlerTxBuilder({\n ...this.#state,\n transformFn: fn,\n } as unknown as HandlerTxBuilderState<\n TServiceCalls,\n TRetrieveResults,\n HasTransformRetrieve extends true ? TRetrieveSuccessResult : TRetrieveResults,\n TMutateResult,\n TNewTransformResult,\n THooks\n >);\n }\n\n /**\n * Execute the transaction and return the result.\n */\n execute(): Promise<\n AwaitedPromisesInObject<\n InferBuilderResultType<\n TRetrieveResults,\n TRetrieveSuccessResult,\n TServiceCalls,\n TMutateResult,\n TTransformResult,\n HasTransform,\n HasMutate,\n HasTransformRetrieve,\n HasRetrieve\n >\n >\n > {\n const state = this.#state;\n\n // Convert builder state to legacy callbacks format\n const callbacks: HandlerTxCallbacks<\n TRetrieveResults,\n TRetrieveSuccessResult,\n TServiceCalls,\n TMutateResult,\n TTransformResult,\n THooks\n > = {\n serviceCalls: state.withServiceCallsFn,\n retrieve: state.retrieveFn\n ? (context) => {\n return state.retrieveFn!({\n forSchema: context.forSchema,\n idempotencyKey: context.idempotencyKey,\n currentAttempt: context.currentAttempt,\n });\n }\n : undefined,\n retrieveSuccess: state.transformRetrieveFn,\n mutate: state.mutateFn\n ? (ctx) => {\n return state.mutateFn!({\n forSchema: ctx.forSchema,\n idempotencyKey: ctx.idempotencyKey,\n currentAttempt: ctx.currentAttempt,\n retrieveResult: ctx.retrieveResult,\n serviceIntermediateResult: ctx.serviceIntermediateResult,\n });\n }\n : undefined,\n success: state.transformFn\n ? (ctx) => {\n return state.transformFn!({\n retrieveResult: ctx.retrieveResult,\n mutateResult: ctx.mutateResult,\n serviceResult: ctx.serviceResult,\n serviceIntermediateResult: ctx.serviceIntermediateResult,\n } as BuilderTransformContextWithMutate<\n TRetrieveSuccessResult,\n TMutateResult,\n ExtractServiceFinalResults<TServiceCalls>,\n ExtractServiceRetrieveResults<TServiceCalls>\n >);\n }\n : undefined,\n };\n\n // Use the existing executeTx implementation\n return executeTx(callbacks as Parameters<typeof executeTx>[0], state.options) as Promise<\n AwaitedPromisesInObject<\n InferBuilderResultType<\n TRetrieveResults,\n TRetrieveSuccessResult,\n TServiceCalls,\n TMutateResult,\n TTransformResult,\n HasTransform,\n HasMutate,\n HasTransformRetrieve,\n HasRetrieve\n >\n >\n >;\n }\n}\n\n/**\n * Create a new HandlerTxBuilder with the given options.\n */\nexport function createHandlerTxBuilder<THooks extends HooksMap = {}>(\n options: ExecuteTxOptions,\n hooks?: THooks,\n): HandlerTxBuilder<readonly [], [], [], unknown, unknown, false, false, false, false, THooks> {\n return new HandlerTxBuilder({\n options,\n hooks,\n });\n}\n"],"mappings":";;;;;;AAQA,MAAM,kBAAkB,OAAO,WAAW;;;;;;AAoW1C,SAAS,gBAUP,QACA,WASA,SAC4B;CAE5B,MAAM,EACJ,SAAS,eACT,SAAS,sBACT,QAAQ,wBACN,QAAQ,eAAiC;CAG7C,MAAM,gBAAgB,QAAQ,SAAS,EAAE,UAAU,QAAQ,CAAC;CAG5D,IAAIA;AACJ,KAAI;AACF,MAAI,UAAU,aACZ,gBAAe,UAAU,cAAc;UAElC,OAAO;AACd,gBAAc,yBAAyB;AACvC,gBAAc,wBAAwB;AACtC,gBAAc,YAAY,GAAG;AAC7B,sBAAoB,MAAM;AAC1B,QAAM;;CAER,IAAIC;AACJ,KAAI;AACF,MAAI,UAAU,UAAU,UAAU;GAChC,MAAM,WAAW,cAAc,UAA2B,OAAO;AACjE,cAAW,UAAU,SAAS,SAAS;;UAElC,OAAO;AACd,gBAAc,yBAAyB;AACvC,gBAAc,wBAAwB;AACtC,gBAAc,YAAY,GAAG;AAC7B,sBAAoB,MAAM;AAC1B,QAAM;;AAER,eAAc,yBAAyB;AAGvC,KAAI,SACF,UAAS,eAAe,MACrB,YAAY,qBAAqB,QAA4B,GAC7D,UAAU,oBAAoB,MAAM,CACtC;UACQ,CAAC,UAAU,SAEpB,sBAAqB,EAAE,CAAgC;CAGzD,MAAMC,WAQF;EACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA,uBAAuB;EACvB,cAAc;EACd,aAAa;EACb;EACD;AAED,QAAO;GACJ,kBAAkB;EAEnB,WAAW;EAWZ;;;;;;;;AAyCH,SAAS,oBACP,WACqB;CACrB,MAAMC,YAAiC,EAAE;CACzC,MAAM,uBAAO,IAAI,KAAwB;CAEzC,SAAS,QAAQ,UAAyC;AACxD,MAAI,aAAa,OACf;AAGF,MAAI,KAAK,IAAI,SAAS,CACpB;AAEF,OAAK,IAAI,SAAS;EAGlB,MAAM,eAAe,SAAS,UAAU;AACxC,MAAI,aACF,MAAK,MAAM,eAAe,aACxB,SAAQ,YAAY;AAIxB,YAAU,KAAK,SAAS;;AAG1B,MAAK,MAAM,YAAY,UACrB,SAAQ,SAAS;AAGnB,QAAO;;;;;;AAOT,eAAe,6BACb,UACA,SACe;CACf,MAAM,WAAW,SAAS;CAC1B,MAAM,YAAY,SAAS;CAG3B,MAAM,kBAAkB,MAAM,SAAS;CAKvC,MAAMC,iBAA4B,EAAE;AACpC,KAAI,SAAS,aACX,MAAK,MAAM,eAAe,SAAS,cAAc;AAC/C,MAAI,gBAAgB,QAAW;AAC7B,kBAAe,KAAK,OAAU;AAC9B;;EAGF,MAAM,sBAAsB,YAAY;AAGxC,MACE,oBAAoB,0BAA0B,UAC9C,EACE,MAAM,QAAQ,oBAAoB,sBAAsB,IACxD,oBAAoB,sBAAsB,WAAW,KACrD,oBAAoB,UAAU,QAGhC,gBAAe,KAAK,oBAAoB,sBAAsB;WACrD,oBAAoB,iBAAiB,OAC9C,gBAAe,KAAK,oBAAoB,aAAa;MAErD,gBAAe,KAAK,oBAAoB,sBAAsB;;AAKpE,KAAI,UAAU,gBACZ,UAAS,wBAAwB,UAAU,gBACzC,iBACA,eACD;KAED,UAAS,wBAAwB;AAGnC,KAAI,UAAU,QAAQ;EACpB,MAAM,YAAY;GAChB,KAAK,SAAS,SACV,QAAQ,UAAU,SAAS,OAAO,GACjC;GAGL,gBAAgB,SAAS;GAGzB,2BAA2B;GAG5B;AACD,WAAS,eAAe,UAAU,OAAO,UAAU;;AAGrD,KAAI,SAAS,SACX,UAAS,SAAS,wBAAwB;KAG1C,UAAS,cAAc,wBAAwB;;;;;AAOnD,eAAe,2BAA8B,UAAmC;CAC9E,MAAM,WAAW,SAAS;CAC1B,MAAM,YAAY,SAAS;CAE3B,MAAMC,6BAAwC,EAAE;CAChD,MAAMC,sBAAiC,EAAE;AACzC,KAAI,SAAS,aACX,MAAK,MAAM,eAAe,SAAS,cAAc;AAC/C,MAAI,gBAAgB,QAAW;AAC7B,8BAA2B,KAAK,OAAU;AAC1C,uBAAoB,KAAK,OAAU;AACnC;;EAKF,MAAM,sBAAsB,YAAY;AAGxC,MACE,oBAAoB,0BAA0B,UAC9C,EACE,MAAM,QAAQ,oBAAoB,sBAAsB,IACxD,oBAAoB,sBAAsB,WAAW,KACrD,oBAAoB,UAAU,QAGhC,4BAA2B,KAAK,oBAAoB,sBAAsB;WACjE,oBAAoB,iBAAiB,OAC9C,4BAA2B,KAAK,oBAAoB,aAAa;MAEjE,4BAA2B,KAAK,oBAAoB,sBAAsB;AAE5E,sBAAoB,KAAK,oBAAoB,YAAY;;AAI7D,KAAI,UAAU,SAAS;EACrB,MAAM,aAAa;GACjB,gBAAgB,SAAS;GAGzB,cAAc,SAAS;GACvB,eAAe;GAGf,2BAA2B;GAG5B;AACD,WAAS,cAAc,UAAU,QAAQ,WAAW;YAC3C,UAAU,OACnB,UAAS,cAAe,MAAM,sBAAsB,SAAS,aAAa;UACjE,UAAU,mBAAmB,UAAU,SAChD,UAAS,cAAc,SAAS;KAEhC,UAAS,cAAc;AAGzB,QAAO,SAAS;;;;;;;;;;;;;;;;;;;;AAqBlB,eAAe,UACb,WASA,SACkB;CAOlB,MAAM,cACJ,QAAQ,eACR,IAAI,8BAA8B;EAChC,YAAY;EACZ,gBAAgB;EAChB,YAAY;EACb,CAAC;CACJ,MAAM,SAAS,QAAQ;CACvB,IAAI,UAAU;AAEd,QAAO,MAAM;AAEX,MAAI,QAAQ,QACV,OAAM,IAAI,MAAM,gCAAgC;AAGlD,MAAI;GAEF,MAAM,UAAU,QAAQ,kBAAkB;GAG1C,MAAMC,UAAoC;IACxC,YAA8D,QAAW,UAAc;AACrF,YAAO,QAAQ,UAAU,QAAQ,MAAM;;IAEzC,gBAAgB,QAAQ;IACxB,gBAAgB;IACjB;GAGD,IAAIP;AACJ,OAAI,UAAU,aACZ,gBAAe,UAAU,cAAc;GAIzC,MAAM,uBAAuB,UAAU,WAAW,QAAQ;GAE1D,MAAM,0BAA0B,eAAe,oBAAoB,CAAC,GAAG,aAAa,CAAC,GAAG,EAAE;AAE1F,SAAM,QAAQ,iBAAiB;GAG/B,MAAMQ,iBAAmC,uBACrC,MAAM,qBAAqB,iBAC1B,EAAE;AAEP,QAAK,MAAM,YAAY,wBACrB,OAAM,6BAA6B,UAAU,QAAQ;GAGvD,MAAMJ,iBAA4B,EAAE;AACpC,OAAI,aACF,MAAK,MAAM,eAAe,cAAc;AACtC,QAAI,gBAAgB,QAAW;AAC7B,oBAAe,KAAK,OAAU;AAC9B;;IAEF,MAAM,sBAAsB,YAAY;AAGxC,QACE,oBAAoB,0BAA0B,UAC9C,EACE,MAAM,QAAQ,oBAAoB,sBAAsB,IACxD,oBAAoB,sBAAsB,WAAW,KACrD,oBAAoB,UAAU,QAGhC,gBAAe,KAAK,oBAAoB,sBAAsB;aACrD,oBAAoB,iBAAiB,OAC9C,gBAAe,KAAK,oBAAoB,aAAa;QAErD,gBAAe,KAAK,oBAAoB,sBAAsB;;GAMpE,IAAIK;AACJ,OAAI,UAAU,gBACZ,yBAAwB,UAAU,gBAChC,gBACA,eACD;OAED,yBAAwB;GAG1B,IAAIC;AACJ,OAAI,UAAU,QAAQ;IACpB,MAAMC,YAIF;KACF,GAAG;KACH,gBAAgB;KAChB,2BAA2B;KAC5B;AACD,mBAAe,UAAU,OAAO,UAAU;;AAG5C,OAAI,QAAQ,eACV,SAAQ,eAAe,QAAQ;AAGjC,OAAI,EADW,MAAM,QAAQ,kBAAkB,EACnC,QACV,OAAM,IAAI,0BAA0B;AAItC,QAAK,MAAM,YAAY,wBACrB,OAAM,2BAA2B,SAAS;GAG5C,MAAML,sBAAiC,EAAE;AACzC,OAAI,aACF,MAAK,MAAM,eAAe,cAAc;AACtC,QAAI,gBAAgB,QAAW;AAC7B,yBAAoB,KAAK,OAAU;AACnC;;AAEF,wBAAoB,KAAK,YAAY,UAAU,YAAY;;GAI/D,IAAIM;AACJ,OAAI,UAAU,SAAS;IAGrB,MAAM,aAAa;KACjB,gBAAgB;KAChB;KACA,eAAe;KACf,2BAA2B;KAC5B;AACD,kBAAc,UAAU,QAAQ,WAAW;cAClC,UAAU,OACnB,eAAc,MAAM,sBAAsB,aAAa;YAC9C,UAAU,mBAAmB,UAAU,SAChD,eAAc;OAEd,eAAc;AAGhB,OAAI,QAAQ,cACV,OAAM,QAAQ,cAAc,QAAQ;AAGtC,UAAO,MAAM,sBAAsB,YAAY;WACxC,OAAO;AACd,OAAI,QAAQ,QACV,OAAM,IAAI,MAAM,gCAAgC;AAIlD,OAAI,EAAE,iBAAiB,0BACrB,OAAM;AAGR,OAAI,CAAC,YAAY,YAAY,SAAS,OAAO,OAAO,EAAE;AACpD,QAAI,QAAQ,QACV,OAAM,IAAI,MAAM,gCAAgC;AAElD,UAAM,IAAI,0BAA0B;;GAGtC,MAAM,UAAU,YAAY,WAAW,QAAQ;AAC/C,OAAI,UAAU,EACZ,OAAM,IAAI,SAAS,YAAY,WAAW,SAAS,QAAQ,CAAC;AAG9D;;;;;;;;AASN,IAAa,2BAAb,cAA8C,MAAM;CAClD,YAAY,UAAU,4CAA4C;AAChE,QAAM,QAAQ;AACd,OAAK,OAAO;;;;;;AAiChB,eAAe,sBAAyB,KAA6C;AACnF,KAAI,QAAQ,QAAQ,QAAQ,OAC1B,QAAO;AAGT,KAAI,OAAO,QAAQ,SACjB,QAAO;AAIT,KAAI,eAAe,QACjB,QAAQ,MAAM;AAIhB,KAAI,MAAM,QAAQ,IAAI,CAIpB,QAHgB,MAAM,QAAQ,IAC5B,IAAI,KAAK,SAAU,gBAAgB,UAAU,OAAO,QAAQ,QAAQ,KAAK,CAAE,CAC5E;AAIH,KAAI,IAAI,gBAAgB,OACtB,QAAO;CAET,MAAM,SAAS,EAAE;CACjB,MAAM,UAAU,OAAO,QAAQ,IAA+B;CAC9D,MAAM,iBAAiB,MAAM,QAAQ,IACnC,QAAQ,IAAI,OAAO,CAAC,KAAK,WAAW;AAElC,SAAO,CAAC,KADa,iBAAiB,UAAU,MAAM,QAAQ,MACpC;GAC1B,CACH;AAED,MAAK,MAAM,CAAC,KAAK,UAAU,eACzB,CAAC,OAAmC,OAAO;AAG7C,QAAO;;;;;;;;;;;;;;;;;;;AAyMT,IAAa,mBAAb,MAAa,iBAaX;CACA,CAASC;CAUT,YACE,OASA;AACA,QAAKA,QAAS;;;;;CAOhB,iBACE,IAaA;AACA,SAAO,IAAI,iBAAiB;GAC1B,GAAG,MAAKA;GACR,oBAAoB;GACrB,CAQC;;;;;CAMJ,SACE,IAeA;AACA,SAAO,IAAI,iBAAiB;GAC1B,GAAG,MAAKA;GACR,YAAY;GACZ,qBAAqB;GACtB,CAQC;;;;;CAMJ,kBACE,IAgBA;AACA,SAAO,IAAI,iBAAiB;GAC1B,GAAG,MAAKA;GACR,qBAAqB;GACtB,CAQC;;;;;CAMJ,OACE,IAoBA;AACA,SAAO,IAAI,iBAAiB;GAC1B,GAAG,MAAKA;GACR,UAAU;GACX,CAQC;;;;;CAMJ,UACE,IA0BA;AACA,SAAO,IAAI,iBAAiB;GAC1B,GAAG,MAAKA;GACR,aAAa;GACd,CAQC;;;;;CAMJ,QAoBE;EACA,MAAM,QAAQ,MAAKA;EAGnB,MAAMC,YAQF;GACF,cAAc,MAAM;GACpB,UAAU,MAAM;GAChB,iBAAiB,MAAM;GACvB,QAAQ,MAAM,YACT,QAAQ;AACP,WAAO,MAAM,SAAU;KACrB,KAAK,IAAI;KACT,gBAAgB,IAAI;KACpB,2BAA2B,IAAI;KAChC,CAAC;OAEJ;GACJ,SAAS,MAAM,eACV,QAAQ;AACP,WAAO,MAAM,YAAa;KACxB,gBAAgB,IAAI;KACpB,cAAc,IAAI;KAClB,eAAe,IAAI;KACnB,2BAA2B,IAAI;KAChC,CAKC;OAEJ;GACL;AAID,SAAO,gBAAgB,MAAM,QAAQ,WAAkB,MAAM,QAAQ;;;;;;AA2BzE,SAAgB,uBACd,QACA,SACA,OAaA;AACA,QAAO,IAAI,iBAAiB;EAC1B;EACA;EACA;EACD,CAAC;;;;;;;;;;;;;;;;;AAoEJ,IAAa,mBAAb,MAAa,iBAYX;CACA,CAASD;CAST,YACE,OAQA;AACA,QAAKA,QAAS;;;;;CAOhB,iBACE,IAYA;AACA,SAAO,IAAI,iBAAiB;GAC1B,GAAG,MAAKA;GACR,oBAAoB;GACrB,CAOC;;;;;;CAOJ,SACE,IAmBA;AACA,SAAO,IAAI,iBAAiB;GAC1B,GAAG,MAAKA;GACR,YAAY;GACZ,qBAAqB;GACtB,CAOC;;;;;CAMJ,kBACE,IAeA;AACA,SAAO,IAAI,iBAAiB;GAC1B,GAAG,MAAKA;GACR,qBAAqB;GACtB,CAOC;;;;;CAMJ,OACE,IAkBA;AACA,SAAO,IAAI,iBAAiB;GAC1B,GAAG,MAAKA;GACR,UAAU;GACX,CAOC;;;;;CAMJ,UACE,IAyBA;AACA,SAAO,IAAI,iBAAiB;GAC1B,GAAG,MAAKA;GACR,aAAa;GACd,CAOC;;;;;CAMJ,UAcE;EACA,MAAM,QAAQ,MAAKA;AAmDnB,SAAO,UAzCH;GACF,cAAc,MAAM;GACpB,UAAU,MAAM,cACX,YAAY;AACX,WAAO,MAAM,WAAY;KACvB,WAAW,QAAQ;KACnB,gBAAgB,QAAQ;KACxB,gBAAgB,QAAQ;KACzB,CAAC;OAEJ;GACJ,iBAAiB,MAAM;GACvB,QAAQ,MAAM,YACT,QAAQ;AACP,WAAO,MAAM,SAAU;KACrB,WAAW,IAAI;KACf,gBAAgB,IAAI;KACpB,gBAAgB,IAAI;KACpB,gBAAgB,IAAI;KACpB,2BAA2B,IAAI;KAChC,CAAC;OAEJ;GACJ,SAAS,MAAM,eACV,QAAQ;AACP,WAAO,MAAM,YAAa;KACxB,gBAAgB,IAAI;KACpB,cAAc,IAAI;KAClB,eAAe,IAAI;KACnB,2BAA2B,IAAI;KAChC,CAKC;OAEJ;GACL,EAG8D,MAAM,QAAQ;;;;;;AAqBjF,SAAgB,uBACd,SACA,OAC6F;AAC7F,QAAO,IAAI,iBAAiB;EAC1B;EACA;EACD,CAAC"}
|
|
1
|
+
{"version":3,"file":"execute-unit-of-work.js","names":["serviceCalls: TServiceCalls | undefined","typedUow: TypedUnitOfWork<TSchema, TRetrieveResults, unknown, THooks> | undefined","internal: TxResultInternal<\n TSchema,\n TRetrieveResults,\n TRetrieveSuccessResult,\n TServiceCalls,\n TMutateResult,\n TSuccessResult,\n THooks\n >","collected: TxResult<unknown>[]","serviceResults: unknown[]","serviceIntermediateResults: unknown[]","serviceFinalResults: unknown[]","retryPolicy: RetryPolicy | undefined","context: HandlerTxContext<THooks>","retrieveResult: TRetrieveResults","retrieveSuccessResult: TRetrieveSuccessResult","mutateResult: TMutateResult | undefined","mutateCtx: HandlerTxMutateContext<\n TRetrieveSuccessResult,\n ExtractServiceRetrieveResults<TServiceCalls>,\n THooks\n >","finalResult: unknown","#state","callbacks: ServiceTxCallbacks<\n TSchema,\n TRetrieveResults,\n TRetrieveSuccessResult,\n TServiceCalls,\n TMutateResult,\n TTransformResult,\n THooks\n >"],"sources":["../../../src/query/unit-of-work/execute-unit-of-work.ts"],"sourcesContent":["import type { AnySchema } from \"../../schema/create\";\nimport type { TypedUnitOfWork, IUnitOfWork } from \"./unit-of-work\";\nimport type { HooksMap } from \"../../hooks/hooks\";\nimport { ExponentialBackoffRetryPolicy, NoRetryPolicy, type RetryPolicy } from \"./retry-policy\";\n\n/**\n * Symbol to identify TxResult objects\n */\nconst TX_RESULT_BRAND = Symbol(\"TxResult\");\n\n/**\n * Check if a value is a TxResult\n */\nexport function isTxResult(value: unknown): value is TxResult<unknown> {\n return (\n value !== null &&\n typeof value === \"object\" &&\n TX_RESULT_BRAND in value &&\n (value as Record<symbol, boolean>)[TX_RESULT_BRAND] === true\n );\n}\n\n/**\n * Extract the retrieve success result type from a TxResult.\n * If the TxResult has retrieveSuccess, returns its return type.\n * Otherwise returns the raw retrieve results type.\n * Handles undefined (for optional service patterns like optionalService?.method()).\n */\nexport type ExtractTxRetrieveSuccessResult<T> = T extends undefined\n ? undefined\n : T extends TxResult<unknown, infer R>\n ? R\n : never;\n\n/**\n * Extract the final result type from a TxResult.\n * Handles undefined (for optional service patterns like optionalService?.method()).\n */\nexport type ExtractTxFinalResult<T> = T extends undefined\n ? undefined\n : T extends TxResult<infer R, infer _>\n ? R\n : Awaited<T>;\n\n/**\n * Map over service calls array to extract retrieve success results from each service call.\n * Preserves tuple structure while extracting the retrieve success result type from each element.\n */\nexport type ExtractServiceRetrieveResults<T extends readonly unknown[]> = {\n [K in keyof T]: ExtractTxRetrieveSuccessResult<T[K]>;\n};\n\n/**\n * Map over service calls array to extract final results from each service call.\n * Preserves tuple structure while extracting the final result type from each element.\n */\nexport type ExtractServiceFinalResults<T extends readonly unknown[]> = {\n [K in keyof T]: ExtractTxFinalResult<T[K]>;\n};\n\n/**\n * Context passed to mutate callback for service methods\n */\nexport interface ServiceTxMutateContext<\n TSchema extends AnySchema,\n TRetrieveSuccessResult,\n TServiceRetrieveResults extends readonly unknown[],\n THooks extends HooksMap,\n> {\n /** Unit of work for scheduling mutations */\n uow: TypedUnitOfWork<TSchema, [], unknown, THooks>;\n /** Result from retrieveSuccess callback (or raw retrieve results if no retrieveSuccess) */\n retrieveResult: TRetrieveSuccessResult;\n /** Array of retrieve success results from service calls (intermediate results, not final) */\n serviceIntermediateResult: TServiceRetrieveResults;\n}\n\n/**\n * Context passed to handler-level callbacks\n */\nexport interface HandlerTxContext<THooks extends HooksMap> {\n /** Get a typed Unit of Work for the given schema */\n forSchema: <S extends AnySchema, H extends HooksMap = THooks>(\n schema: S,\n hooks?: H,\n ) => TypedUnitOfWork<S, [], unknown, H>;\n /** Unique key for this transaction attempt (for idempotency/deduplication) */\n idempotencyKey: string;\n /** Current attempt number (0-based) */\n currentAttempt: number;\n}\n\n/**\n * Context passed to handler mutate callback\n */\nexport interface HandlerTxMutateContext<\n TRetrieveSuccessResult,\n TServiceRetrieveResults extends readonly unknown[],\n THooks extends HooksMap,\n> extends HandlerTxContext<THooks> {\n /** Result from retrieveSuccess callback (or raw retrieve results if no retrieveSuccess) */\n retrieveResult: TRetrieveSuccessResult;\n /** Array of retrieve success results from service calls (intermediate results, not final) */\n serviceIntermediateResult: TServiceRetrieveResults;\n}\n\n/**\n * Context passed to success callback when mutate IS provided\n */\nexport interface TxSuccessContextWithMutate<\n TRetrieveSuccessResult,\n TMutateResult,\n TServiceFinalResults extends readonly unknown[],\n TServiceRetrieveResults extends readonly unknown[],\n> {\n /** Result from retrieveSuccess callback (or raw retrieve results if no retrieveSuccess) */\n retrieveResult: TRetrieveSuccessResult;\n /** Result from mutate callback */\n mutateResult: TMutateResult;\n /** Array of final results from service calls */\n serviceResult: TServiceFinalResults;\n /** Array of retrieve success results from service calls (same as what mutate receives) */\n serviceIntermediateResult: TServiceRetrieveResults;\n}\n\n/**\n * Context passed to success callback when mutate is NOT provided\n */\nexport interface TxSuccessContextWithoutMutate<\n TRetrieveSuccessResult,\n TServiceFinalResults extends readonly unknown[],\n TServiceRetrieveResults extends readonly unknown[],\n> {\n /** Result from retrieveSuccess callback (or raw retrieve results if no retrieveSuccess) */\n retrieveResult: TRetrieveSuccessResult;\n /** No mutate callback was provided */\n mutateResult: undefined;\n /** Array of final results from service calls */\n serviceResult: TServiceFinalResults;\n /** Array of retrieve success results from service calls (same as what mutate receives) */\n serviceIntermediateResult: TServiceRetrieveResults;\n}\n\n/**\n * Context passed to success callback.\n * Union of TxSuccessContextWithMutate and TxSuccessContextWithoutMutate to handle\n * both cases in a single callback signature.\n */\nexport type TxSuccessContext<\n TRetrieveSuccessResult,\n TMutateResult,\n TServiceFinalResults extends readonly unknown[],\n TServiceRetrieveResults extends readonly unknown[] = readonly unknown[],\n> =\n | TxSuccessContextWithMutate<\n TRetrieveSuccessResult,\n TMutateResult,\n TServiceFinalResults,\n TServiceRetrieveResults\n >\n | TxSuccessContextWithoutMutate<\n TRetrieveSuccessResult,\n TServiceFinalResults,\n TServiceRetrieveResults\n >;\n\n/**\n * Callbacks for service-level TxResult.\n *\n * Return type priority:\n * 1. If success exists: ReturnType<success>\n * 2. Else if mutate exists: ReturnType<mutate>\n * 3. Else if retrieveSuccess exists: ReturnType<retrieveSuccess>\n * 4. Else if retrieve exists: TRetrieveResults\n * 5. Else: serviceResult array type\n */\nexport interface ServiceTxCallbacks<\n TSchema extends AnySchema,\n TRetrieveResults extends unknown[],\n TRetrieveSuccessResult,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n TServiceCalls extends readonly (TxResult<any, any> | undefined)[],\n TMutateResult,\n TSuccessResult,\n THooks extends HooksMap,\n> {\n /**\n * Service calls - other TxResults to execute first.\n */\n serviceCalls?: () => TServiceCalls;\n\n /**\n * Retrieval phase callback - schedules retrieval operations.\n */\n retrieve?: (\n uow: TypedUnitOfWork<TSchema, [], unknown, THooks>,\n ) => TypedUnitOfWork<TSchema, TRetrieveResults, unknown, THooks>;\n\n /**\n * Transform retrieve results before passing to mutate.\n */\n retrieveSuccess?: (\n retrieveResult: TRetrieveResults,\n serviceResult: ExtractServiceRetrieveResults<TServiceCalls>,\n ) => TRetrieveSuccessResult;\n\n /**\n * Mutation phase callback - schedules mutations based on retrieve results.\n */\n mutate?: (\n ctx: ServiceTxMutateContext<\n TSchema,\n TRetrieveSuccessResult,\n ExtractServiceRetrieveResults<TServiceCalls>,\n THooks\n >,\n ) => TMutateResult;\n\n /**\n * Success callback - final transformation after mutations complete.\n */\n success?: (\n ctx: TxSuccessContext<\n TRetrieveSuccessResult,\n TMutateResult,\n ExtractServiceFinalResults<TServiceCalls>,\n ExtractServiceRetrieveResults<TServiceCalls>\n >,\n ) => TSuccessResult;\n}\n\n/**\n * Callbacks for handler-level executeTx.\n * Uses context-based callbacks that provide forSchema() method.\n */\nexport interface HandlerTxCallbacks<\n TRetrieveResults extends unknown[],\n TRetrieveSuccessResult,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n TServiceCalls extends readonly (TxResult<any, any> | undefined)[],\n TMutateResult,\n TSuccessResult,\n THooks extends HooksMap,\n> {\n /**\n * Service calls - other TxResults to execute first.\n */\n serviceCalls?: () => TServiceCalls;\n\n /**\n * Retrieval phase callback - schedules retrieval operations using context.forSchema().\n * Return a TypedUnitOfWork to get typed results, or void for no retrieval.\n */\n retrieve?: (\n context: HandlerTxContext<THooks>,\n ) => TypedUnitOfWork<AnySchema, TRetrieveResults, unknown, HooksMap> | void;\n\n /**\n * Transform retrieve results before passing to mutate.\n */\n retrieveSuccess?: (\n retrieveResult: TRetrieveResults,\n serviceResult: ExtractServiceRetrieveResults<TServiceCalls>,\n ) => TRetrieveSuccessResult;\n\n /**\n * Mutation phase callback - schedules mutations based on retrieve results.\n */\n mutate?: (\n ctx: HandlerTxMutateContext<\n TRetrieveSuccessResult,\n ExtractServiceRetrieveResults<TServiceCalls>,\n THooks\n >,\n ) => TMutateResult;\n\n /**\n * Success callback - final transformation after mutations complete.\n */\n success?: (\n ctx: TxSuccessContext<\n TRetrieveSuccessResult,\n TMutateResult,\n ExtractServiceFinalResults<TServiceCalls>,\n ExtractServiceRetrieveResults<TServiceCalls>\n >,\n ) => TSuccessResult;\n}\n\n/**\n * Internal structure storing TxResult callbacks and state.\n */\ninterface TxResultInternal<\n TSchema extends AnySchema,\n TRetrieveResults extends unknown[],\n TRetrieveSuccessResult,\n TServiceCalls extends readonly (TxResult<unknown> | undefined)[],\n TMutateResult,\n TSuccessResult,\n THooks extends HooksMap,\n> {\n schema: TSchema | undefined;\n callbacks: ServiceTxCallbacks<\n TSchema,\n TRetrieveResults,\n TRetrieveSuccessResult,\n TServiceCalls,\n TMutateResult,\n TSuccessResult,\n THooks\n >;\n /** The typed UOW created during retrieve callback */\n typedUow: TypedUnitOfWork<TSchema, TRetrieveResults, unknown, THooks> | undefined;\n /** The restricted UOW for signaling (used when typedUow is undefined) */\n restrictedUow: IUnitOfWork;\n /** Promise that resolves when retrieve phase is complete */\n retrievePhase: Promise<TRetrieveResults>;\n /** Resolve function for retrievePhase */\n resolveRetrievePhase: (results: TRetrieveResults) => void;\n /** Reject function for retrievePhase */\n rejectRetrievePhase: (error: unknown) => void;\n /** Computed retrieve success result (set after retrieveSuccess runs) */\n retrieveSuccessResult: TRetrieveSuccessResult | undefined;\n /** Computed mutate result (set after mutate runs) */\n mutateResult: TMutateResult | undefined;\n /** Computed final result (set after success runs or defaults) */\n finalResult: TSuccessResult | undefined;\n /** Service calls resolved */\n serviceCalls: TServiceCalls | undefined;\n}\n\n/**\n * TxResult represents a transaction definition (not yet executed).\n * It describes the work to be done: retrieve operations, transformations, and mutations.\n *\n * Service methods return TxResult objects, and the handler's executeTx function\n * orchestrates their execution with retry support.\n *\n * @template TResult - The final result type (determined by return type priority)\n * @template TRetrieveSuccessResult - The retrieve success result type (what serviceCalls receive).\n * Defaults to TResult, meaning serviceCalls receive the same type as the final result.\n */\nexport interface TxResult<TResult, TRetrieveSuccessResult = TResult> {\n /** Brand to identify TxResult objects */\n readonly [TX_RESULT_BRAND]: true;\n\n /** Internal structure - do not access directly */\n readonly _internal: TxResultInternal<\n AnySchema,\n unknown[],\n TRetrieveSuccessResult,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n readonly TxResult<any, any>[],\n unknown,\n TResult,\n HooksMap\n >;\n}\n\n/**\n * Create a TxResult for service context.\n * Schedules retrieve operations on the baseUow and returns a TxResult with callbacks stored.\n * @internal Used by ServiceTxBuilder.build()\n */\nfunction createServiceTx<\n TSchema extends AnySchema,\n TRetrieveResults extends unknown[],\n TRetrieveSuccessResult,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n TServiceCalls extends readonly (TxResult<any, any> | undefined)[],\n TMutateResult,\n TSuccessResult,\n THooks extends HooksMap = {},\n>(\n schema: TSchema | undefined,\n callbacks: ServiceTxCallbacks<\n TSchema,\n TRetrieveResults,\n TRetrieveSuccessResult,\n TServiceCalls,\n TMutateResult,\n TSuccessResult,\n THooks\n >,\n baseUow: IUnitOfWork,\n): TxResult<unknown, unknown> {\n // Create deferred promise for retrieve phase\n const {\n promise: retrievePhase,\n resolve: resolveRetrievePhase,\n reject: rejectRetrievePhase,\n } = Promise.withResolvers<TRetrieveResults>();\n\n // Get a restricted view that signals readiness\n const restrictedUow = baseUow.restrict({ readyFor: \"none\" });\n\n // Call serviceCalls factory if provided - this invokes other services which schedule their operations\n let serviceCalls: TServiceCalls | undefined;\n try {\n if (callbacks.serviceCalls) {\n serviceCalls = callbacks.serviceCalls();\n }\n } catch (error) {\n restrictedUow.signalReadyForRetrieval();\n restrictedUow.signalReadyForMutation();\n retrievePhase.catch(() => {});\n rejectRetrievePhase(error);\n throw error;\n }\n let typedUow: TypedUnitOfWork<TSchema, TRetrieveResults, unknown, THooks> | undefined;\n try {\n if (schema && callbacks.retrieve) {\n const emptyUow = restrictedUow.forSchema<TSchema, THooks>(schema);\n typedUow = callbacks.retrieve(emptyUow);\n }\n } catch (error) {\n restrictedUow.signalReadyForRetrieval();\n restrictedUow.signalReadyForMutation();\n retrievePhase.catch(() => {});\n rejectRetrievePhase(error);\n throw error;\n }\n restrictedUow.signalReadyForRetrieval();\n\n // Set up the retrieve phase promise to resolve when the handler executes retrieve\n if (typedUow) {\n typedUow.retrievalPhase.then(\n (results) => resolveRetrievePhase(results as TRetrieveResults),\n (error) => rejectRetrievePhase(error),\n );\n } else if (!callbacks.retrieve) {\n // No retrieve callback - resolve immediately with empty array\n resolveRetrievePhase([] as unknown as TRetrieveResults);\n }\n\n const internal: TxResultInternal<\n TSchema,\n TRetrieveResults,\n TRetrieveSuccessResult,\n TServiceCalls,\n TMutateResult,\n TSuccessResult,\n THooks\n > = {\n schema,\n callbacks,\n typedUow,\n restrictedUow,\n retrievePhase,\n resolveRetrievePhase,\n rejectRetrievePhase,\n retrieveSuccessResult: undefined,\n mutateResult: undefined,\n finalResult: undefined,\n serviceCalls,\n };\n\n return {\n [TX_RESULT_BRAND]: true as const,\n // Cast through unknown to avoid type incompatibility issues with generic constraints\n _internal: internal as unknown as TxResultInternal<\n AnySchema,\n unknown[],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n any,\n readonly TxResult<unknown>[],\n unknown,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n any,\n HooksMap\n >,\n };\n}\n\n/**\n * Options for executing transactions\n */\nexport interface ExecuteTxOptions {\n /**\n * Factory function that creates or resets a UOW instance for each attempt\n */\n createUnitOfWork: () => IUnitOfWork;\n\n /**\n * Retry policy for handling optimistic concurrency conflicts\n */\n retryPolicy?: RetryPolicy;\n\n /**\n * Abort signal to cancel execution\n */\n signal?: AbortSignal;\n\n /**\n * Callback invoked before mutations are executed.\n * Use this to add additional mutation operations (e.g., hook event records).\n */\n onBeforeMutate?: (uow: IUnitOfWork) => void;\n\n /**\n * Callback invoked after successful mutation phase.\n * Use this for post-mutation processing like hook execution.\n */\n onAfterMutate?: (uow: IUnitOfWork) => Promise<void>;\n}\n\n/**\n * Recursively collect all TxResults from a service call tree.\n * Returns them in a flat array in dependency order (serviceCalls before their dependents).\n * Skips undefined values (which can occur with optional service patterns like\n * optionalService?.method()).\n */\nfunction collectAllTxResults(\n txResults: readonly (TxResult<unknown> | undefined)[],\n): TxResult<unknown>[] {\n const collected: TxResult<unknown>[] = [];\n const seen = new Set<TxResult<unknown>>();\n\n function collect(txResult: TxResult<unknown> | undefined) {\n if (txResult === undefined) {\n return;\n }\n\n if (seen.has(txResult)) {\n return;\n }\n seen.add(txResult);\n\n // First collect serviceCalls (so they come before this TxResult)\n const serviceCalls = txResult._internal.serviceCalls;\n if (serviceCalls) {\n for (const serviceCall of serviceCalls) {\n collect(serviceCall);\n }\n }\n\n collected.push(txResult);\n }\n\n for (const txResult of txResults) {\n collect(txResult);\n }\n\n return collected;\n}\n\n/**\n * Execute a single TxResult's callbacks after retrieve phase completes.\n * This processes retrieveSuccess, mutate, and success callbacks in order.\n */\nasync function processTxResultAfterRetrieve<T>(\n txResult: TxResult<T>,\n baseUow: IUnitOfWork,\n): Promise<void> {\n const internal = txResult._internal;\n const callbacks = internal.callbacks;\n\n // Wait for retrieve phase to complete\n const retrieveResults = await internal.retrievePhase;\n\n // Collect serviceCalls' retrieve success results (or mutate results if no retrieve was provided)\n // When a serviceCall has no retrieve/retrieveSuccess but has mutate, its mutate has already run\n // (due to service call execution order), so we use its mutate result as the \"retrieve success result\".\n const serviceResults: unknown[] = [];\n if (internal.serviceCalls) {\n for (const serviceCall of internal.serviceCalls) {\n if (serviceCall === undefined) {\n serviceResults.push(undefined);\n continue;\n }\n\n const serviceCallInternal = serviceCall._internal;\n // Check if this is a mutate-only service call (empty array sentinel with mutate callback)\n // In that case, prefer mutateResult over the empty array retrieveSuccessResult\n if (\n serviceCallInternal.retrieveSuccessResult !== undefined &&\n !(\n Array.isArray(serviceCallInternal.retrieveSuccessResult) &&\n serviceCallInternal.retrieveSuccessResult.length === 0 &&\n serviceCallInternal.callbacks.mutate\n )\n ) {\n serviceResults.push(serviceCallInternal.retrieveSuccessResult);\n } else if (serviceCallInternal.mutateResult !== undefined) {\n serviceResults.push(serviceCallInternal.mutateResult);\n } else {\n serviceResults.push(serviceCallInternal.retrieveSuccessResult);\n }\n }\n }\n\n if (callbacks.retrieveSuccess) {\n internal.retrieveSuccessResult = callbacks.retrieveSuccess(\n retrieveResults,\n serviceResults as ExtractServiceRetrieveResults<readonly TxResult<unknown>[]>,\n );\n } else {\n internal.retrieveSuccessResult = retrieveResults as typeof internal.retrieveSuccessResult;\n }\n\n if (callbacks.mutate) {\n const mutateCtx = {\n uow: internal.schema\n ? baseUow.forSchema(internal.schema)\n : (undefined as unknown as TypedUnitOfWork<AnySchema, [], unknown, HooksMap>),\n // At this point retrieveSuccessResult has been set (either by retrieveSuccess\n // callback or defaulted to retrieveResults)\n retrieveResult: internal.retrieveSuccessResult as NonNullable<\n typeof internal.retrieveSuccessResult\n >,\n serviceIntermediateResult: serviceResults as ExtractServiceRetrieveResults<\n readonly TxResult<unknown>[]\n >,\n };\n internal.mutateResult = callbacks.mutate(mutateCtx);\n }\n\n if (internal.typedUow) {\n internal.typedUow.signalReadyForMutation();\n } else {\n // For TxResults without retrieve callback, signal via the restricted UOW\n internal.restrictedUow.signalReadyForMutation();\n }\n}\n\n/**\n * Execute a single TxResult's success callback after mutations complete.\n */\nasync function processTxResultAfterMutate<T>(txResult: TxResult<T>): Promise<T> {\n const internal = txResult._internal;\n const callbacks = internal.callbacks;\n\n const serviceIntermediateResults: unknown[] = [];\n const serviceFinalResults: unknown[] = [];\n if (internal.serviceCalls) {\n for (const serviceCall of internal.serviceCalls) {\n if (serviceCall === undefined) {\n serviceIntermediateResults.push(undefined);\n serviceFinalResults.push(undefined);\n continue;\n }\n\n // Mirror the logic from processTxResultAfterRetrieve/executeTx:\n // For mutate-only serviceCalls (no retrieve phase, just mutations), use mutateResult instead of retrieveSuccessResult\n const serviceCallInternal = serviceCall._internal;\n // Check if this is a mutate-only service call (empty array sentinel with mutate callback)\n // In that case, prefer mutateResult over the empty array retrieveSuccessResult\n if (\n serviceCallInternal.retrieveSuccessResult !== undefined &&\n !(\n Array.isArray(serviceCallInternal.retrieveSuccessResult) &&\n serviceCallInternal.retrieveSuccessResult.length === 0 &&\n serviceCallInternal.callbacks.mutate\n )\n ) {\n serviceIntermediateResults.push(serviceCallInternal.retrieveSuccessResult);\n } else if (serviceCallInternal.mutateResult !== undefined) {\n serviceIntermediateResults.push(serviceCallInternal.mutateResult);\n } else {\n serviceIntermediateResults.push(serviceCallInternal.retrieveSuccessResult);\n }\n serviceFinalResults.push(serviceCallInternal.finalResult);\n }\n }\n\n if (callbacks.success) {\n const successCtx = {\n retrieveResult: internal.retrieveSuccessResult as NonNullable<\n typeof internal.retrieveSuccessResult\n >,\n mutateResult: internal.mutateResult,\n serviceResult: serviceFinalResults as ExtractServiceFinalResults<\n readonly TxResult<unknown>[]\n >,\n serviceIntermediateResult: serviceIntermediateResults as ExtractServiceRetrieveResults<\n readonly TxResult<unknown>[]\n >,\n };\n internal.finalResult = callbacks.success(successCtx) as T;\n } else if (callbacks.mutate) {\n internal.finalResult = (await awaitPromisesInObject(internal.mutateResult)) as T;\n } else if (callbacks.retrieveSuccess || callbacks.retrieve) {\n internal.finalResult = internal.retrieveSuccessResult as T;\n } else {\n internal.finalResult = serviceFinalResults as T;\n }\n\n return internal.finalResult as T;\n}\n\n/**\n * Execute a transaction with the unified TxResult pattern.\n *\n * This is the handler-level function that actually executes TxResults with retry support.\n *\n * @param callbacks - Transaction callbacks (serviceCalls, retrieve, retrieveSuccess, mutate, success)\n * @param options - Configuration including UOW factory, retry policy, and abort signal\n * @returns Promise resolving to the result determined by return type priority\n *\n * @example\n * ```ts\n * // Simple retrieve + transform\n * const user = await executeTx({\n * retrieve: (ctx) => ctx.forSchema(usersSchema).find(\"users\", ...),\n * retrieveSuccess: ([users]) => users[0] ?? null,\n * }, { createUnitOfWork });\n * @internal Used by HandlerTxBuilder.execute()\n */\nasync function executeTx(\n callbacks: HandlerTxCallbacks<\n unknown[],\n unknown,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n readonly (TxResult<any, any> | undefined)[],\n unknown,\n unknown,\n HooksMap\n >,\n options: ExecuteTxOptions,\n): Promise<unknown> {\n type TRetrieveResults = unknown[];\n type TRetrieveSuccessResult = unknown;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n type TServiceCalls = readonly (TxResult<any, any> | undefined)[];\n type TMutateResult = unknown;\n type THooks = HooksMap;\n const signal = options.signal;\n let attempt = 0;\n\n while (true) {\n // Check if aborted before starting attempt\n if (signal?.aborted) {\n throw new Error(\"Transaction execution aborted\");\n }\n\n let retryPolicy: RetryPolicy | undefined;\n\n try {\n // Create a fresh UOW for this attempt\n const baseUow = options.createUnitOfWork();\n\n // Create handler context\n const context: HandlerTxContext<THooks> = {\n forSchema: <S extends AnySchema, H extends HooksMap = THooks>(schema: S, hooks?: H) => {\n return baseUow.forSchema(schema, hooks);\n },\n idempotencyKey: baseUow.idempotencyKey,\n currentAttempt: attempt,\n };\n\n // Call serviceCalls factory if provided - this creates TxResults that schedule operations\n let serviceCalls: TServiceCalls | undefined;\n if (callbacks.serviceCalls) {\n serviceCalls = callbacks.serviceCalls();\n }\n\n // Call retrieve callback - it returns a TypedUnitOfWork with scheduled operations or void\n const typedUowFromRetrieve = callbacks.retrieve?.(context);\n\n const allServiceCallTxResults = serviceCalls ? collectAllTxResults([...serviceCalls]) : [];\n\n const hasRetrieveOps = baseUow.getRetrievalOperations().length > 0;\n if (!hasRetrieveOps) {\n if (options.retryPolicy) {\n throw new Error(\n \"Retry policy is only supported when the transaction includes retrieve operations.\",\n );\n }\n retryPolicy = new NoRetryPolicy();\n } else {\n retryPolicy =\n options.retryPolicy ??\n new ExponentialBackoffRetryPolicy({\n maxRetries: 5,\n initialDelayMs: 10,\n maxDelayMs: 100,\n });\n }\n\n await baseUow.executeRetrieve();\n\n // Get retrieve results from TypedUnitOfWork's retrievalPhase or default to empty array\n const retrieveResult: TRetrieveResults = typedUowFromRetrieve\n ? await typedUowFromRetrieve.retrievalPhase\n : ([] as unknown as TRetrieveResults);\n\n for (const txResult of allServiceCallTxResults) {\n await processTxResultAfterRetrieve(txResult, baseUow);\n }\n\n const serviceResults: unknown[] = [];\n if (serviceCalls) {\n for (const serviceCall of serviceCalls) {\n if (serviceCall === undefined) {\n serviceResults.push(undefined);\n continue;\n }\n const serviceCallInternal = serviceCall._internal;\n // Check if this is a mutate-only service call (empty array sentinel with mutate callback)\n // In that case, prefer mutateResult over the empty array retrieveSuccessResult\n if (\n serviceCallInternal.retrieveSuccessResult !== undefined &&\n !(\n Array.isArray(serviceCallInternal.retrieveSuccessResult) &&\n serviceCallInternal.retrieveSuccessResult.length === 0 &&\n serviceCallInternal.callbacks.mutate\n )\n ) {\n serviceResults.push(serviceCallInternal.retrieveSuccessResult);\n } else if (serviceCallInternal.mutateResult !== undefined) {\n serviceResults.push(serviceCallInternal.mutateResult);\n } else {\n serviceResults.push(serviceCallInternal.retrieveSuccessResult);\n }\n }\n }\n\n // Call retrieveSuccess if provided\n let retrieveSuccessResult: TRetrieveSuccessResult;\n if (callbacks.retrieveSuccess) {\n retrieveSuccessResult = callbacks.retrieveSuccess(\n retrieveResult,\n serviceResults as ExtractServiceRetrieveResults<TServiceCalls>,\n );\n } else {\n retrieveSuccessResult = retrieveResult as unknown as TRetrieveSuccessResult;\n }\n\n let mutateResult: TMutateResult | undefined;\n if (callbacks.mutate) {\n const mutateCtx: HandlerTxMutateContext<\n TRetrieveSuccessResult,\n ExtractServiceRetrieveResults<TServiceCalls>,\n THooks\n > = {\n ...context,\n retrieveResult: retrieveSuccessResult,\n serviceIntermediateResult: serviceResults as ExtractServiceRetrieveResults<TServiceCalls>,\n };\n mutateResult = callbacks.mutate(mutateCtx);\n }\n\n if (options.onBeforeMutate) {\n options.onBeforeMutate(baseUow);\n }\n const result = await baseUow.executeMutations();\n if (!result.success) {\n throw new ConcurrencyConflictError();\n }\n\n // Process each serviceCall TxResult's success callback\n for (const txResult of allServiceCallTxResults) {\n await processTxResultAfterMutate(txResult);\n }\n\n const serviceFinalResults: unknown[] = [];\n if (serviceCalls) {\n for (const serviceCall of serviceCalls) {\n if (serviceCall === undefined) {\n serviceFinalResults.push(undefined);\n continue;\n }\n serviceFinalResults.push(serviceCall._internal.finalResult);\n }\n }\n\n let finalResult: unknown;\n if (callbacks.success) {\n // The success context type is determined by the overload - we construct it at runtime\n // and the type safety is guaranteed by the discriminated overloads\n const successCtx = {\n retrieveResult: retrieveSuccessResult,\n mutateResult,\n serviceResult: serviceFinalResults as ExtractServiceFinalResults<TServiceCalls>,\n serviceIntermediateResult: serviceResults as ExtractServiceRetrieveResults<TServiceCalls>,\n } as Parameters<NonNullable<typeof callbacks.success>>[0];\n finalResult = callbacks.success(successCtx);\n } else if (callbacks.mutate) {\n finalResult = await awaitPromisesInObject(mutateResult);\n } else if (callbacks.retrieveSuccess || callbacks.retrieve) {\n finalResult = retrieveSuccessResult;\n } else {\n finalResult = serviceFinalResults;\n }\n\n if (options.onAfterMutate) {\n await options.onAfterMutate(baseUow);\n }\n\n return await awaitPromisesInObject(finalResult);\n } catch (error) {\n if (signal?.aborted) {\n throw new Error(\"Transaction execution aborted\");\n }\n\n // Only retry concurrency conflicts, not other errors\n if (!(error instanceof ConcurrencyConflictError)) {\n throw error;\n }\n\n if (!retryPolicy) {\n throw error;\n }\n\n if (!retryPolicy.shouldRetry(attempt, error, signal)) {\n if (signal?.aborted) {\n throw new Error(\"Transaction execution aborted\");\n }\n throw new ConcurrencyConflictError();\n }\n\n const delayMs = retryPolicy.getDelayMs(attempt);\n if (delayMs > 0) {\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n }\n\n attempt++;\n }\n }\n}\n\n/**\n * Error thrown when a Unit of Work execution fails due to optimistic concurrency conflict.\n * This error triggers automatic retry behavior in executeTx.\n */\nexport class ConcurrencyConflictError extends Error {\n constructor(message = \"Optimistic concurrency conflict detected\") {\n super(message);\n this.name = \"ConcurrencyConflictError\";\n }\n}\n\n/**\n * Type utility that unwraps promises 1 level deep in objects, arrays, or direct promises\n * Handles tuples, arrays, objects, and direct promises\n */\nexport type AwaitedPromisesInObject<T> =\n // First check if it's a Promise\n T extends Promise<infer U>\n ? Awaited<U>\n : // Check for arrays with known length (tuples) - preserves tuple structure\n T extends readonly [unknown, ...unknown[]]\n ? { [K in keyof T]: AwaitedPromisesInObject<T[K]> }\n : T extends [unknown, ...unknown[]]\n ? { [K in keyof T]: AwaitedPromisesInObject<T[K]> }\n : // Check for regular arrays (unknown length)\n T extends (infer U)[]\n ? Awaited<U>[]\n : T extends readonly (infer U)[]\n ? readonly Awaited<U>[]\n : // Check for objects\n T extends Record<string, unknown>\n ? {\n [K in keyof T]: T[K] extends Promise<infer U> ? Awaited<U> : T[K];\n }\n : // Otherwise return as-is\n T;\n\n/**\n * Await promises in an object 1 level deep\n */\nasync function awaitPromisesInObject<T>(obj: T): Promise<AwaitedPromisesInObject<T>> {\n if (obj === null || obj === undefined) {\n return obj as AwaitedPromisesInObject<T>;\n }\n\n if (typeof obj !== \"object\") {\n return obj as AwaitedPromisesInObject<T>;\n }\n\n // Check if it's a Promise\n if (obj instanceof Promise) {\n return (await obj) as AwaitedPromisesInObject<T>;\n }\n\n // Check if it's an array\n if (Array.isArray(obj)) {\n const awaited = await Promise.all(\n obj.map((item) => (item instanceof Promise ? item : Promise.resolve(item))),\n );\n return awaited as AwaitedPromisesInObject<T>;\n }\n\n if (obj.constructor !== Object) {\n return obj as AwaitedPromisesInObject<T>;\n }\n const result = {} as T;\n const entries = Object.entries(obj as Record<string, unknown>);\n const awaitedEntries = await Promise.all(\n entries.map(async ([key, value]) => {\n const awaitedValue = value instanceof Promise ? await value : value;\n return [key, awaitedValue] as const;\n }),\n );\n\n for (const [key, value] of awaitedEntries) {\n (result as Record<string, unknown>)[key] = value;\n }\n\n return result as AwaitedPromisesInObject<T>;\n}\n\n// ============================================================================\n// Builder Pattern Types and Classes\n// ============================================================================\n\n/**\n * Context passed to service-level mutate callback in builder pattern.\n */\nexport interface ServiceBuilderMutateContext<\n TSchema extends AnySchema,\n TRetrieveSuccessResult,\n TServiceResult extends readonly unknown[],\n THooks extends HooksMap,\n> {\n /** Unit of work for scheduling mutations */\n uow: TypedUnitOfWork<TSchema, [], unknown, THooks>;\n /** Result from transformRetrieve callback (or raw retrieve results if no transformRetrieve) */\n retrieveResult: TRetrieveSuccessResult;\n /** Array of retrieve success results from service calls (intermediate results, not final: retrieve results if service has retrieve, mutate result if service only mutates) */\n serviceIntermediateResult: TServiceResult;\n}\n\n/**\n * Context passed to handler-level mutate callback in builder pattern.\n */\nexport interface HandlerBuilderMutateContext<\n TRetrieveSuccessResult,\n TServiceResult extends readonly unknown[],\n THooks extends HooksMap,\n> {\n /** Get a typed Unit of Work for the given schema */\n forSchema: <S extends AnySchema, H extends HooksMap = THooks>(\n schema: S,\n hooks?: H,\n ) => TypedUnitOfWork<S, [], unknown, H>;\n /** Unique key for this transaction (for idempotency/deduplication) */\n idempotencyKey: string;\n /** Current attempt number (0-based) */\n currentAttempt: number;\n /** Result from transformRetrieve callback (or raw retrieve results if no transformRetrieve) */\n retrieveResult: TRetrieveSuccessResult;\n /** Array of retrieve success results from service calls (intermediate results, not final: retrieve results if service has retrieve, mutate result if service only mutates) */\n serviceIntermediateResult: TServiceResult;\n}\n\n/**\n * Context passed to transform callback when mutate IS provided.\n */\nexport interface BuilderTransformContextWithMutate<\n TRetrieveSuccessResult,\n TMutateResult,\n TServiceFinalResult extends readonly unknown[],\n TServiceIntermediateResult extends readonly unknown[],\n> {\n /** Result from transformRetrieve callback (or raw retrieve results if no transformRetrieve) */\n retrieveResult: TRetrieveSuccessResult;\n /** Result from mutate callback */\n mutateResult: TMutateResult;\n /** Array of final results from service calls (after success/transform callbacks) */\n serviceResult: TServiceFinalResult;\n /** Array of retrieve success results from service calls (same as what mutate receives: retrieve results if service has retrieve, mutate result if service only mutates) */\n serviceIntermediateResult: TServiceIntermediateResult;\n}\n\n/**\n * Context passed to transform callback when mutate is NOT provided.\n */\nexport interface BuilderTransformContextWithoutMutate<\n TRetrieveSuccessResult,\n TServiceFinalResult extends readonly unknown[],\n TServiceIntermediateResult extends readonly unknown[],\n> {\n /** Result from transformRetrieve callback (or raw retrieve results if no transformRetrieve) */\n retrieveResult: TRetrieveSuccessResult;\n /** No mutate callback was provided */\n mutateResult: undefined;\n /** Array of final results from service calls (after success/transform callbacks) */\n serviceResult: TServiceFinalResult;\n /** Array of retrieve success results from service calls (same as what mutate receives: retrieve results if service has retrieve, mutate result if service only mutates) */\n serviceIntermediateResult: TServiceIntermediateResult;\n}\n\n/**\n * Infer the final result type from builder state:\n * 1. transform → TTransformResult\n * 2. mutate → AwaitedPromisesInObject<TMutateResult>\n * 3. transformRetrieve → TRetrieveSuccessResult\n * 4. retrieve → TRetrieveResults\n * 5. withServiceCalls → ExtractServiceFinalResults<TServiceCalls>\n */\nexport type InferBuilderResultType<\n TRetrieveResults extends unknown[],\n TRetrieveSuccessResult,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n TServiceCalls extends readonly (TxResult<any, any> | undefined)[],\n TMutateResult,\n TTransformResult,\n HasTransform extends boolean,\n HasMutate extends boolean,\n HasTransformRetrieve extends boolean,\n HasRetrieve extends boolean,\n> = HasTransform extends true\n ? TTransformResult\n : HasMutate extends true\n ? AwaitedPromisesInObject<TMutateResult>\n : HasTransformRetrieve extends true\n ? TRetrieveSuccessResult\n : HasRetrieve extends true\n ? TRetrieveResults\n : ExtractServiceFinalResults<TServiceCalls>;\n\n/**\n * Infer the retrieve success result type for the builder:\n * - If transformRetrieve exists: TRetrieveSuccessResult\n * - Else if retrieve exists: TRetrieveResults (raw retrieve results)\n * - Else if mutate exists: AwaitedPromisesInObject<TMutateResult>\n * (mutate result becomes retrieve result for dependents)\n * - Else: TRetrieveResults (raw retrieve results, typically [])\n */\nexport type InferBuilderRetrieveSuccessResult<\n TRetrieveResults extends unknown[],\n TRetrieveSuccessResult,\n TMutateResult,\n HasTransformRetrieve extends boolean,\n HasRetrieve extends boolean,\n HasMutate extends boolean,\n> = HasTransformRetrieve extends true\n ? TRetrieveSuccessResult\n : HasRetrieve extends true\n ? TRetrieveResults\n : HasMutate extends true\n ? AwaitedPromisesInObject<TMutateResult>\n : TRetrieveResults;\n\n/**\n * Internal state for ServiceTxBuilder\n */\ninterface ServiceTxBuilderState<\n TSchema extends AnySchema,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n TServiceCalls extends readonly (TxResult<any, any> | undefined)[],\n TRetrieveResults extends unknown[],\n TRetrieveSuccessResult,\n TMutateResult,\n TTransformResult,\n THooks extends HooksMap,\n> {\n schema: TSchema;\n baseUow: IUnitOfWork;\n hooks?: THooks;\n withServiceCallsFn?: () => TServiceCalls;\n retrieveFn?: (\n uow: TypedUnitOfWork<TSchema, [], unknown, THooks>,\n ) => TypedUnitOfWork<TSchema, TRetrieveResults, unknown, THooks>;\n transformRetrieveFn?: (\n retrieveResult: TRetrieveResults,\n serviceRetrieveResult: ExtractServiceRetrieveResults<TServiceCalls>,\n ) => TRetrieveSuccessResult;\n mutateFn?: (\n ctx: ServiceBuilderMutateContext<\n TSchema,\n TRetrieveSuccessResult,\n ExtractServiceRetrieveResults<TServiceCalls>,\n THooks\n >,\n ) => TMutateResult;\n transformFn?: (\n ctx:\n | BuilderTransformContextWithMutate<\n TRetrieveSuccessResult,\n TMutateResult,\n ExtractServiceFinalResults<TServiceCalls>,\n ExtractServiceRetrieveResults<TServiceCalls>\n >\n | BuilderTransformContextWithoutMutate<\n TRetrieveSuccessResult,\n ExtractServiceFinalResults<TServiceCalls>,\n ExtractServiceRetrieveResults<TServiceCalls>\n >,\n ) => TTransformResult;\n}\n\n/**\n * Builder for service-level transactions.\n * Uses a fluent API to build up transaction callbacks with proper type inference.\n *\n * @example\n * ```ts\n * return serviceTx(schema)\n * .withServiceCalls(() => [otherService.getData()])\n * .retrieve((uow) => uow.find(\"users\", ...))\n * .transformRetrieve(([users], serviceResult) => users[0])\n * .mutate(({ uow, retrieveResult, serviceIntermediateResult }) =>\n * uow.create(\"records\", { ... })\n * )\n * .transform(({ mutateResult, serviceResult, serviceIntermediateResult }) => ({ id: mutateResult }))\n * .build();\n * ```\n */\nexport class ServiceTxBuilder<\n TSchema extends AnySchema,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n TServiceCalls extends readonly (TxResult<any, any> | undefined)[],\n TRetrieveResults extends unknown[],\n TRetrieveSuccessResult,\n TMutateResult,\n TTransformResult,\n HasRetrieve extends boolean,\n HasTransformRetrieve extends boolean,\n HasMutate extends boolean,\n HasTransform extends boolean,\n THooks extends HooksMap,\n> {\n readonly #state: ServiceTxBuilderState<\n TSchema,\n TServiceCalls,\n TRetrieveResults,\n TRetrieveSuccessResult,\n TMutateResult,\n TTransformResult,\n THooks\n >;\n\n constructor(\n state: ServiceTxBuilderState<\n TSchema,\n TServiceCalls,\n TRetrieveResults,\n TRetrieveSuccessResult,\n TMutateResult,\n TTransformResult,\n THooks\n >,\n ) {\n this.#state = state;\n }\n\n /**\n * Add dependencies to execute before this transaction.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n withServiceCalls<TNewDeps extends readonly (TxResult<any, any> | undefined)[]>(\n fn: () => TNewDeps,\n ): ServiceTxBuilder<\n TSchema,\n TNewDeps,\n TRetrieveResults,\n TRetrieveSuccessResult,\n TMutateResult,\n TTransformResult,\n HasRetrieve,\n HasTransformRetrieve,\n HasMutate,\n HasTransform,\n THooks\n > {\n return new ServiceTxBuilder({\n ...this.#state,\n withServiceCallsFn: fn,\n } as ServiceTxBuilderState<\n TSchema,\n TNewDeps,\n TRetrieveResults,\n TRetrieveSuccessResult,\n TMutateResult,\n TTransformResult,\n THooks\n >);\n }\n\n /**\n * Add retrieval operations to the transaction.\n */\n retrieve<TNewRetrieveResults extends unknown[]>(\n fn: (\n uow: TypedUnitOfWork<TSchema, [], unknown, THooks>,\n ) => TypedUnitOfWork<TSchema, TNewRetrieveResults, unknown, THooks>,\n ): ServiceTxBuilder<\n TSchema,\n TServiceCalls,\n TNewRetrieveResults,\n TNewRetrieveResults, // Default TRetrieveSuccessResult to TNewRetrieveResults\n TMutateResult,\n TTransformResult,\n true, // HasRetrieve = true\n false, // Reset HasTransformRetrieve since retrieve results changed\n HasMutate,\n HasTransform,\n THooks\n > {\n return new ServiceTxBuilder({\n ...this.#state,\n retrieveFn: fn,\n transformRetrieveFn: undefined, // Clear any existing transformRetrieve since results shape changed\n } as unknown as ServiceTxBuilderState<\n TSchema,\n TServiceCalls,\n TNewRetrieveResults,\n TNewRetrieveResults,\n TMutateResult,\n TTransformResult,\n THooks\n >);\n }\n\n /**\n * Transform retrieve results before passing to mutate.\n */\n transformRetrieve<TNewRetrieveSuccessResult>(\n fn: (\n retrieveResult: TRetrieveResults,\n serviceResult: ExtractServiceRetrieveResults<TServiceCalls>,\n ) => TNewRetrieveSuccessResult,\n ): ServiceTxBuilder<\n TSchema,\n TServiceCalls,\n TRetrieveResults,\n TNewRetrieveSuccessResult,\n TMutateResult,\n TTransformResult,\n HasRetrieve,\n true, // HasTransformRetrieve = true\n HasMutate,\n HasTransform,\n THooks\n > {\n return new ServiceTxBuilder({\n ...this.#state,\n transformRetrieveFn: fn,\n } as unknown as ServiceTxBuilderState<\n TSchema,\n TServiceCalls,\n TRetrieveResults,\n TNewRetrieveSuccessResult,\n TMutateResult,\n TTransformResult,\n THooks\n >);\n }\n\n /**\n * Add mutation operations based on retrieve results.\n */\n mutate<TNewMutateResult>(\n fn: (\n ctx: ServiceBuilderMutateContext<\n TSchema,\n HasTransformRetrieve extends true ? TRetrieveSuccessResult : TRetrieveResults,\n ExtractServiceRetrieveResults<TServiceCalls>,\n THooks\n >,\n ) => TNewMutateResult,\n ): ServiceTxBuilder<\n TSchema,\n TServiceCalls,\n TRetrieveResults,\n HasTransformRetrieve extends true ? TRetrieveSuccessResult : TRetrieveResults,\n TNewMutateResult,\n TTransformResult,\n HasRetrieve,\n HasTransformRetrieve,\n true, // HasMutate = true\n HasTransform,\n THooks\n > {\n return new ServiceTxBuilder({\n ...this.#state,\n mutateFn: fn,\n } as unknown as ServiceTxBuilderState<\n TSchema,\n TServiceCalls,\n TRetrieveResults,\n HasTransformRetrieve extends true ? TRetrieveSuccessResult : TRetrieveResults,\n TNewMutateResult,\n TTransformResult,\n THooks\n >);\n }\n\n /**\n * Add final transformation after mutations complete.\n */\n transform<TNewTransformResult>(\n fn: (\n ctx: HasMutate extends true\n ? BuilderTransformContextWithMutate<\n HasTransformRetrieve extends true ? TRetrieveSuccessResult : TRetrieveResults,\n TMutateResult,\n ExtractServiceFinalResults<TServiceCalls>,\n ExtractServiceRetrieveResults<TServiceCalls>\n >\n : BuilderTransformContextWithoutMutate<\n HasTransformRetrieve extends true ? TRetrieveSuccessResult : TRetrieveResults,\n ExtractServiceFinalResults<TServiceCalls>,\n ExtractServiceRetrieveResults<TServiceCalls>\n >,\n ) => TNewTransformResult,\n ): ServiceTxBuilder<\n TSchema,\n TServiceCalls,\n TRetrieveResults,\n HasTransformRetrieve extends true ? TRetrieveSuccessResult : TRetrieveResults,\n TMutateResult,\n TNewTransformResult,\n HasRetrieve,\n HasTransformRetrieve,\n HasMutate,\n true, // HasTransform = true\n THooks\n > {\n return new ServiceTxBuilder({\n ...this.#state,\n transformFn: fn,\n } as unknown as ServiceTxBuilderState<\n TSchema,\n TServiceCalls,\n TRetrieveResults,\n HasTransformRetrieve extends true ? TRetrieveSuccessResult : TRetrieveResults,\n TMutateResult,\n TNewTransformResult,\n THooks\n >);\n }\n\n /**\n * Build and return the TxResult.\n */\n build(): TxResult<\n InferBuilderResultType<\n TRetrieveResults,\n TRetrieveSuccessResult,\n TServiceCalls,\n TMutateResult,\n TTransformResult,\n HasTransform,\n HasMutate,\n HasTransformRetrieve,\n HasRetrieve\n >,\n InferBuilderRetrieveSuccessResult<\n TRetrieveResults,\n TRetrieveSuccessResult,\n TMutateResult,\n HasTransformRetrieve,\n HasRetrieve,\n HasMutate\n >\n > {\n const state = this.#state;\n\n // Convert builder state to legacy callbacks format\n const callbacks: ServiceTxCallbacks<\n TSchema,\n TRetrieveResults,\n TRetrieveSuccessResult,\n TServiceCalls,\n TMutateResult,\n TTransformResult,\n THooks\n > = {\n serviceCalls: state.withServiceCallsFn,\n retrieve: state.retrieveFn,\n retrieveSuccess: state.transformRetrieveFn,\n mutate: state.mutateFn\n ? (ctx) => {\n return state.mutateFn!({\n uow: ctx.uow,\n retrieveResult: ctx.retrieveResult,\n serviceIntermediateResult: ctx.serviceIntermediateResult,\n });\n }\n : undefined,\n success: state.transformFn\n ? (ctx) => {\n return state.transformFn!({\n retrieveResult: ctx.retrieveResult,\n mutateResult: ctx.mutateResult,\n serviceResult: ctx.serviceResult,\n serviceIntermediateResult: ctx.serviceIntermediateResult,\n } as BuilderTransformContextWithMutate<\n TRetrieveSuccessResult,\n TMutateResult,\n ExtractServiceFinalResults<TServiceCalls>,\n ExtractServiceRetrieveResults<TServiceCalls>\n >);\n }\n : undefined,\n };\n\n // Use the existing createServiceTx implementation\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return createServiceTx(state.schema, callbacks as any, state.baseUow) as unknown as TxResult<\n InferBuilderResultType<\n TRetrieveResults,\n TRetrieveSuccessResult,\n TServiceCalls,\n TMutateResult,\n TTransformResult,\n HasTransform,\n HasMutate,\n HasTransformRetrieve,\n HasRetrieve\n >,\n InferBuilderRetrieveSuccessResult<\n TRetrieveResults,\n TRetrieveSuccessResult,\n TMutateResult,\n HasTransformRetrieve,\n HasRetrieve,\n HasMutate\n >\n >;\n }\n}\n\n/**\n * Create a new ServiceTxBuilder for the given schema.\n */\nexport function createServiceTxBuilder<TSchema extends AnySchema, THooks extends HooksMap = {}>(\n schema: TSchema,\n baseUow: IUnitOfWork,\n hooks?: THooks,\n): ServiceTxBuilder<\n TSchema,\n readonly [],\n [],\n [],\n unknown,\n unknown,\n false,\n false,\n false,\n false,\n THooks\n> {\n return new ServiceTxBuilder({\n schema,\n baseUow,\n hooks,\n });\n}\n\n/**\n * Internal state for HandlerTxBuilder\n */\ninterface HandlerTxBuilderState<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n TServiceCalls extends readonly (TxResult<any, any> | undefined)[],\n TRetrieveResults extends unknown[],\n TRetrieveSuccessResult,\n TMutateResult,\n TTransformResult,\n THooks extends HooksMap,\n> {\n options: ExecuteTxOptions;\n hooks?: THooks;\n withServiceCallsFn?: () => TServiceCalls;\n retrieveFn?: (context: {\n forSchema: <S extends AnySchema, H extends HooksMap = THooks>(\n schema: S,\n hooks?: H,\n ) => TypedUnitOfWork<S, [], unknown, H>;\n idempotencyKey: string;\n currentAttempt: number;\n }) => TypedUnitOfWork<AnySchema, TRetrieveResults, unknown, HooksMap> | void;\n transformRetrieveFn?: (\n retrieveResult: TRetrieveResults,\n serviceResult: ExtractServiceRetrieveResults<TServiceCalls>,\n ) => TRetrieveSuccessResult;\n mutateFn?: (\n ctx: HandlerBuilderMutateContext<\n TRetrieveSuccessResult,\n ExtractServiceRetrieveResults<TServiceCalls>,\n THooks\n >,\n ) => TMutateResult;\n transformFn?: (\n ctx:\n | BuilderTransformContextWithMutate<\n TRetrieveSuccessResult,\n TMutateResult,\n ExtractServiceFinalResults<TServiceCalls>,\n ExtractServiceRetrieveResults<TServiceCalls>\n >\n | BuilderTransformContextWithoutMutate<\n TRetrieveSuccessResult,\n ExtractServiceFinalResults<TServiceCalls>,\n ExtractServiceRetrieveResults<TServiceCalls>\n >,\n ) => TTransformResult;\n}\n\n/**\n * Builder for handler-level transactions.\n * Uses a fluent API to build up transaction callbacks with proper type inference.\n *\n * @example\n * ```ts\n * const result = await handlerTx()\n * .withServiceCalls(() => [userService.getUser(id)])\n * .mutate(({ forSchema, idempotencyKey, currentAttempt, serviceIntermediateResult }) => {\n * return forSchema(ordersSchema).create(\"orders\", { ... });\n * })\n * .transform(({ mutateResult, serviceResult }) => ({ ... }))\n * .execute();\n * ```\n */\nexport class HandlerTxBuilder<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n TServiceCalls extends readonly (TxResult<any, any> | undefined)[],\n TRetrieveResults extends unknown[],\n TRetrieveSuccessResult,\n TMutateResult,\n TTransformResult,\n HasRetrieve extends boolean,\n HasTransformRetrieve extends boolean,\n HasMutate extends boolean,\n HasTransform extends boolean,\n THooks extends HooksMap,\n> {\n readonly #state: HandlerTxBuilderState<\n TServiceCalls,\n TRetrieveResults,\n TRetrieveSuccessResult,\n TMutateResult,\n TTransformResult,\n THooks\n >;\n\n constructor(\n state: HandlerTxBuilderState<\n TServiceCalls,\n TRetrieveResults,\n TRetrieveSuccessResult,\n TMutateResult,\n TTransformResult,\n THooks\n >,\n ) {\n this.#state = state;\n }\n\n /**\n * Add dependencies to execute before this transaction.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n withServiceCalls<TNewDeps extends readonly (TxResult<any, any> | undefined)[]>(\n fn: () => TNewDeps,\n ): HandlerTxBuilder<\n TNewDeps,\n TRetrieveResults,\n TRetrieveSuccessResult,\n TMutateResult,\n TTransformResult,\n HasRetrieve,\n HasTransformRetrieve,\n HasMutate,\n HasTransform,\n THooks\n > {\n return new HandlerTxBuilder({\n ...this.#state,\n withServiceCallsFn: fn,\n } as HandlerTxBuilderState<\n TNewDeps,\n TRetrieveResults,\n TRetrieveSuccessResult,\n TMutateResult,\n TTransformResult,\n THooks\n >);\n }\n\n /**\n * Add retrieval operations to the transaction.\n * Return a TypedUnitOfWork from forSchema().find() to get typed results.\n */\n retrieve<TNewRetrieveResults extends unknown[]>(\n fn: (context: {\n forSchema: <S extends AnySchema, H extends HooksMap = THooks>(\n schema: S,\n hooks?: H,\n ) => TypedUnitOfWork<S, [], unknown, H>;\n idempotencyKey: string;\n currentAttempt: number;\n }) => TypedUnitOfWork<AnySchema, TNewRetrieveResults, unknown, HooksMap> | void,\n ): HandlerTxBuilder<\n TServiceCalls,\n TNewRetrieveResults,\n TNewRetrieveResults, // Default TRetrieveSuccessResult to TNewRetrieveResults\n TMutateResult,\n TTransformResult,\n true, // HasRetrieve = true\n false, // Reset HasTransformRetrieve since retrieve results changed\n HasMutate,\n HasTransform,\n THooks\n > {\n return new HandlerTxBuilder({\n ...this.#state,\n retrieveFn: fn,\n transformRetrieveFn: undefined, // Clear any existing transformRetrieve since results shape changed\n } as unknown as HandlerTxBuilderState<\n TServiceCalls,\n TNewRetrieveResults,\n TNewRetrieveResults,\n TMutateResult,\n TTransformResult,\n THooks\n >);\n }\n\n /**\n * Transform retrieve results before passing to mutate.\n */\n transformRetrieve<TNewRetrieveSuccessResult>(\n fn: (\n retrieveResult: TRetrieveResults,\n serviceResult: ExtractServiceRetrieveResults<TServiceCalls>,\n ) => TNewRetrieveSuccessResult,\n ): HandlerTxBuilder<\n TServiceCalls,\n TRetrieveResults,\n TNewRetrieveSuccessResult,\n TMutateResult,\n TTransformResult,\n HasRetrieve,\n true, // HasTransformRetrieve = true\n HasMutate,\n HasTransform,\n THooks\n > {\n return new HandlerTxBuilder({\n ...this.#state,\n transformRetrieveFn: fn,\n } as unknown as HandlerTxBuilderState<\n TServiceCalls,\n TRetrieveResults,\n TNewRetrieveSuccessResult,\n TMutateResult,\n TTransformResult,\n THooks\n >);\n }\n\n /**\n * Add mutation operations based on retrieve results.\n */\n mutate<TNewMutateResult>(\n fn: (\n ctx: HandlerBuilderMutateContext<\n HasTransformRetrieve extends true ? TRetrieveSuccessResult : TRetrieveResults,\n ExtractServiceRetrieveResults<TServiceCalls>,\n THooks\n >,\n ) => TNewMutateResult,\n ): HandlerTxBuilder<\n TServiceCalls,\n TRetrieveResults,\n HasTransformRetrieve extends true ? TRetrieveSuccessResult : TRetrieveResults,\n TNewMutateResult,\n TTransformResult,\n HasRetrieve,\n HasTransformRetrieve,\n true, // HasMutate = true\n HasTransform,\n THooks\n > {\n return new HandlerTxBuilder({\n ...this.#state,\n mutateFn: fn,\n } as unknown as HandlerTxBuilderState<\n TServiceCalls,\n TRetrieveResults,\n HasTransformRetrieve extends true ? TRetrieveSuccessResult : TRetrieveResults,\n TNewMutateResult,\n TTransformResult,\n THooks\n >);\n }\n\n /**\n * Add final transformation after mutations complete.\n */\n transform<TNewTransformResult>(\n fn: (\n ctx: HasMutate extends true\n ? BuilderTransformContextWithMutate<\n HasTransformRetrieve extends true ? TRetrieveSuccessResult : TRetrieveResults,\n TMutateResult,\n ExtractServiceFinalResults<TServiceCalls>,\n ExtractServiceRetrieveResults<TServiceCalls>\n >\n : BuilderTransformContextWithoutMutate<\n HasTransformRetrieve extends true ? TRetrieveSuccessResult : TRetrieveResults,\n ExtractServiceFinalResults<TServiceCalls>,\n ExtractServiceRetrieveResults<TServiceCalls>\n >,\n ) => TNewTransformResult,\n ): HandlerTxBuilder<\n TServiceCalls,\n TRetrieveResults,\n HasTransformRetrieve extends true ? TRetrieveSuccessResult : TRetrieveResults,\n TMutateResult,\n TNewTransformResult,\n HasRetrieve,\n HasTransformRetrieve,\n HasMutate,\n true, // HasTransform = true\n THooks\n > {\n return new HandlerTxBuilder({\n ...this.#state,\n transformFn: fn,\n } as unknown as HandlerTxBuilderState<\n TServiceCalls,\n TRetrieveResults,\n HasTransformRetrieve extends true ? TRetrieveSuccessResult : TRetrieveResults,\n TMutateResult,\n TNewTransformResult,\n THooks\n >);\n }\n\n /**\n * Execute the transaction and return the result.\n */\n execute(): Promise<\n AwaitedPromisesInObject<\n InferBuilderResultType<\n TRetrieveResults,\n TRetrieveSuccessResult,\n TServiceCalls,\n TMutateResult,\n TTransformResult,\n HasTransform,\n HasMutate,\n HasTransformRetrieve,\n HasRetrieve\n >\n >\n > {\n const state = this.#state;\n\n // Convert builder state to legacy callbacks format\n const callbacks: HandlerTxCallbacks<\n TRetrieveResults,\n TRetrieveSuccessResult,\n TServiceCalls,\n TMutateResult,\n TTransformResult,\n THooks\n > = {\n serviceCalls: state.withServiceCallsFn,\n retrieve: state.retrieveFn\n ? (context) => {\n return state.retrieveFn!({\n forSchema: context.forSchema,\n idempotencyKey: context.idempotencyKey,\n currentAttempt: context.currentAttempt,\n });\n }\n : undefined,\n retrieveSuccess: state.transformRetrieveFn,\n mutate: state.mutateFn\n ? (ctx) => {\n return state.mutateFn!({\n forSchema: ctx.forSchema,\n idempotencyKey: ctx.idempotencyKey,\n currentAttempt: ctx.currentAttempt,\n retrieveResult: ctx.retrieveResult,\n serviceIntermediateResult: ctx.serviceIntermediateResult,\n });\n }\n : undefined,\n success: state.transformFn\n ? (ctx) => {\n return state.transformFn!({\n retrieveResult: ctx.retrieveResult,\n mutateResult: ctx.mutateResult,\n serviceResult: ctx.serviceResult,\n serviceIntermediateResult: ctx.serviceIntermediateResult,\n } as BuilderTransformContextWithMutate<\n TRetrieveSuccessResult,\n TMutateResult,\n ExtractServiceFinalResults<TServiceCalls>,\n ExtractServiceRetrieveResults<TServiceCalls>\n >);\n }\n : undefined,\n };\n\n // Use the existing executeTx implementation\n return executeTx(callbacks as Parameters<typeof executeTx>[0], state.options) as Promise<\n AwaitedPromisesInObject<\n InferBuilderResultType<\n TRetrieveResults,\n TRetrieveSuccessResult,\n TServiceCalls,\n TMutateResult,\n TTransformResult,\n HasTransform,\n HasMutate,\n HasTransformRetrieve,\n HasRetrieve\n >\n >\n >;\n }\n}\n\n/**\n * Create a new HandlerTxBuilder with the given options.\n */\nexport function createHandlerTxBuilder<THooks extends HooksMap = {}>(\n options: ExecuteTxOptions,\n hooks?: THooks,\n): HandlerTxBuilder<readonly [], [], [], unknown, unknown, false, false, false, false, THooks> {\n return new HandlerTxBuilder({\n options,\n hooks,\n });\n}\n"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
import { Prettify } from "../../util/types.js";
|
|
1
2
|
import { AnySchema, AnyTable, FragnoId, IdColumn, Index, Relation } from "../../schema/create.js";
|
|
2
3
|
import { Condition, ConditionBuilder } from "../condition-builder.js";
|
|
3
4
|
import { CompiledJoin } from "../orm/orm.js";
|
|
4
5
|
import { Cursor, CursorResult } from "../cursor.js";
|
|
5
|
-
import { Prettify } from "../../util/types.js";
|
|
6
6
|
import { HookPayload, HooksMap, TriggerHookOptions, TriggeredHook } from "../../hooks/hooks.js";
|
|
7
7
|
import { ExtractJoinOut, ExtractSelect, SelectClause, SelectResult, TableToInsertValues, TableToUpdateValues } from "../simple-query-interface.js";
|
|
8
8
|
|
|
@@ -99,7 +99,7 @@ type UOWState = "building-retrieval" | "building-mutation" | "executed";
|
|
|
99
99
|
type RetrievalOperation<TSchema extends AnySchema, TTable extends AnyTable = TSchema["tables"][keyof TSchema["tables"]]> = {
|
|
100
100
|
type: "find";
|
|
101
101
|
schema: TSchema;
|
|
102
|
-
namespace?: string;
|
|
102
|
+
namespace?: string | null;
|
|
103
103
|
table: TTable;
|
|
104
104
|
indexName: string;
|
|
105
105
|
options: FindOptions<TTable, SelectClause<TTable>>;
|
|
@@ -108,7 +108,7 @@ type RetrievalOperation<TSchema extends AnySchema, TTable extends AnyTable = TSc
|
|
|
108
108
|
} | {
|
|
109
109
|
type: "count";
|
|
110
110
|
schema: TSchema;
|
|
111
|
-
namespace?: string;
|
|
111
|
+
namespace?: string | null;
|
|
112
112
|
table: TTable;
|
|
113
113
|
indexName: string;
|
|
114
114
|
options: Pick<FindOptions<TTable>, "where" | "useIndex">;
|
|
@@ -119,7 +119,7 @@ type RetrievalOperation<TSchema extends AnySchema, TTable extends AnyTable = TSc
|
|
|
119
119
|
type MutationOperation<TSchema extends AnySchema, TTable extends AnyTable = TSchema["tables"][keyof TSchema["tables"]]> = {
|
|
120
120
|
type: "update";
|
|
121
121
|
schema: TSchema;
|
|
122
|
-
namespace?: string;
|
|
122
|
+
namespace?: string | null;
|
|
123
123
|
table: TTable["name"];
|
|
124
124
|
id: FragnoId | string;
|
|
125
125
|
checkVersion: boolean;
|
|
@@ -127,21 +127,21 @@ type MutationOperation<TSchema extends AnySchema, TTable extends AnyTable = TSch
|
|
|
127
127
|
} | {
|
|
128
128
|
type: "create";
|
|
129
129
|
schema: TSchema;
|
|
130
|
-
namespace?: string;
|
|
130
|
+
namespace?: string | null;
|
|
131
131
|
table: TTable["name"];
|
|
132
132
|
values: TableToInsertValues<TTable>;
|
|
133
133
|
generatedExternalId: string;
|
|
134
134
|
} | {
|
|
135
135
|
type: "delete";
|
|
136
136
|
schema: TSchema;
|
|
137
|
-
namespace?: string;
|
|
137
|
+
namespace?: string | null;
|
|
138
138
|
table: TTable["name"];
|
|
139
139
|
id: FragnoId | string;
|
|
140
140
|
checkVersion: boolean;
|
|
141
141
|
} | {
|
|
142
142
|
type: "check";
|
|
143
143
|
schema: TSchema;
|
|
144
|
-
namespace?: string;
|
|
144
|
+
namespace?: string | null;
|
|
145
145
|
table: TTable["name"];
|
|
146
146
|
id: FragnoId;
|
|
147
147
|
};
|
|
@@ -150,6 +150,14 @@ type MutationOperation<TSchema extends AnySchema, TTable extends AnyTable = TSch
|
|
|
150
150
|
*/
|
|
151
151
|
interface CompiledMutation<TOutput> {
|
|
152
152
|
query: TOutput;
|
|
153
|
+
/**
|
|
154
|
+
* Original mutation operation for execution metadata (e.g., outbox payloads).
|
|
155
|
+
*/
|
|
156
|
+
operation?: MutationOperation<AnySchema>;
|
|
157
|
+
/**
|
|
158
|
+
* Idempotency key for the Unit of Work that produced this mutation.
|
|
159
|
+
*/
|
|
160
|
+
uowId?: string;
|
|
153
161
|
/**
|
|
154
162
|
* The type of mutation operation (create, update, delete, or check).
|
|
155
163
|
*/
|
|
@@ -397,7 +405,7 @@ interface IUnitOfWork {
|
|
|
397
405
|
signalReadyForMutation(): void;
|
|
398
406
|
reset(): void;
|
|
399
407
|
forSchema<TOtherSchema extends AnySchema, TOtherHooks extends HooksMap = {}>(schema: TOtherSchema, hooks?: TOtherHooks): TypedUnitOfWork<TOtherSchema, [], any, TOtherHooks>;
|
|
400
|
-
registerSchema(schema: AnySchema, namespace: string): void;
|
|
408
|
+
registerSchema(schema: AnySchema, namespace: string | null): void;
|
|
401
409
|
triggerHook(hookName: string, payload: unknown, options?: TriggerHookOptions): void;
|
|
402
410
|
getTriggeredHooks(): readonly TriggeredHook[];
|
|
403
411
|
}
|
|
@@ -409,11 +417,39 @@ interface IUnitOfWork {
|
|
|
409
417
|
* Note: This is just a marker interface. Restriction is enforced by the UnitOfWork class itself.
|
|
410
418
|
*/
|
|
411
419
|
interface IUnitOfWorkRestricted extends Omit<IUnitOfWork, "executeRetrieve" | "executeMutations"> {}
|
|
412
|
-
|
|
420
|
+
type UOWInstrumentationPhase = "beforeRetrieve" | "afterRetrieve" | "beforeMutate" | "afterMutate";
|
|
421
|
+
type UOWInstrumentationInjection = {
|
|
422
|
+
type: "conflict";
|
|
423
|
+
reason?: string;
|
|
424
|
+
} | {
|
|
425
|
+
type: "error";
|
|
426
|
+
error: Error;
|
|
427
|
+
};
|
|
428
|
+
type UOWInstrumentationContext = {
|
|
429
|
+
phase: UOWInstrumentationPhase;
|
|
430
|
+
uowName?: string;
|
|
431
|
+
idempotencyKey: string;
|
|
432
|
+
retrievalOpsCount: number;
|
|
433
|
+
mutationOpsCount: number;
|
|
434
|
+
uow: IUnitOfWork;
|
|
435
|
+
};
|
|
436
|
+
type UOWInstrumentation = {
|
|
437
|
+
beforeRetrieve?: (ctx: UOWInstrumentationContext) => void | Promise<void> | UOWInstrumentationInjection;
|
|
438
|
+
afterRetrieve?: (ctx: UOWInstrumentationContext) => void | Promise<void> | UOWInstrumentationInjection;
|
|
439
|
+
beforeMutate?: (ctx: UOWInstrumentationContext) => void | Promise<void> | UOWInstrumentationInjection;
|
|
440
|
+
afterMutate?: (ctx: UOWInstrumentationContext) => void | Promise<void> | UOWInstrumentationInjection;
|
|
441
|
+
};
|
|
442
|
+
type UOWInstrumentationFinalizer = {
|
|
443
|
+
afterRetrieve?: (ctx: UOWInstrumentationContext) => void | Promise<void>;
|
|
444
|
+
afterMutate?: (ctx: UOWInstrumentationContext) => void | Promise<void>;
|
|
445
|
+
};
|
|
446
|
+
declare function createUnitOfWork(compiler: UOWCompiler<unknown>, executor: UOWExecutor<unknown, unknown>, decoder: UOWDecoder<unknown>, schemaNamespaceMap?: WeakMap<AnySchema, string | null>, name?: string): UnitOfWork;
|
|
413
447
|
interface UnitOfWorkConfig {
|
|
414
448
|
dryRun?: boolean;
|
|
415
449
|
onQuery?: (query: unknown) => void;
|
|
416
450
|
idempotencyKey?: string;
|
|
451
|
+
instrumentation?: UOWInstrumentation;
|
|
452
|
+
instrumentationFinalizer?: UOWInstrumentationFinalizer;
|
|
417
453
|
}
|
|
418
454
|
/**
|
|
419
455
|
* Unit of Work implementation with optimistic concurrency control
|
|
@@ -448,13 +484,13 @@ interface UnitOfWorkConfig {
|
|
|
448
484
|
*/
|
|
449
485
|
declare class UnitOfWork<const TRawInput = unknown> implements IUnitOfWork {
|
|
450
486
|
#private;
|
|
451
|
-
constructor(compiler: UOWCompiler<unknown>, executor: UOWExecutor<unknown, TRawInput>, decoder: UOWDecoder<TRawInput>, name?: string, config?: UnitOfWorkConfig, schemaNamespaceMap?: WeakMap<AnySchema, string>);
|
|
487
|
+
constructor(compiler: UOWCompiler<unknown>, executor: UOWExecutor<unknown, TRawInput>, decoder: UOWDecoder<TRawInput>, name?: string, config?: UnitOfWorkConfig, schemaNamespaceMap?: WeakMap<AnySchema, string | null>);
|
|
452
488
|
/**
|
|
453
489
|
* Register a schema with its namespace for cross-fragment operations.
|
|
454
490
|
* This is used for internal fragments like hooks that need to create
|
|
455
491
|
* records in a different schema during the same transaction.
|
|
456
492
|
*/
|
|
457
|
-
registerSchema(schema: AnySchema, namespace: string): void;
|
|
493
|
+
registerSchema(schema: AnySchema, namespace: string | null): void;
|
|
458
494
|
/**
|
|
459
495
|
* Get a schema-specific typed view of this UOW for type-safe operations.
|
|
460
496
|
* Returns a wrapper that provides typed operations for the given schema.
|
|
@@ -568,7 +604,7 @@ declare class UnitOfWork<const TRawInput = unknown> implements IUnitOfWork {
|
|
|
568
604
|
*/
|
|
569
605
|
declare class TypedUnitOfWork<const TSchema extends AnySchema, const TRetrievalResults extends unknown[] = [], const TRawInput = unknown, const THooks extends HooksMap = {}> implements IUnitOfWork {
|
|
570
606
|
#private;
|
|
571
|
-
constructor(schema: TSchema, namespace: string | undefined, uow: UnitOfWork<TRawInput>);
|
|
607
|
+
constructor(schema: TSchema, namespace: string | null | undefined, uow: UnitOfWork<TRawInput>);
|
|
572
608
|
get $results(): Prettify<TRetrievalResults>;
|
|
573
609
|
get schema(): TSchema;
|
|
574
610
|
get name(): string | undefined;
|
|
@@ -590,7 +626,7 @@ declare class TypedUnitOfWork<const TSchema extends AnySchema, const TRetrievalR
|
|
|
590
626
|
signalReadyForMutation(): void;
|
|
591
627
|
reset(): void;
|
|
592
628
|
forSchema<TOtherSchema extends AnySchema, TOtherHooks extends HooksMap = {}>(schema: TOtherSchema, hooks?: TOtherHooks): TypedUnitOfWork<TOtherSchema, [], TRawInput, TOtherHooks>;
|
|
593
|
-
registerSchema(schema: AnySchema, namespace: string): void;
|
|
629
|
+
registerSchema(schema: AnySchema, namespace: string | null): void;
|
|
594
630
|
compile<TOutput>(compiler: UOWCompiler<TOutput>): {
|
|
595
631
|
name?: string;
|
|
596
632
|
retrievalBatch: TOutput[];
|
|
@@ -642,5 +678,5 @@ declare class TypedUnitOfWork<const TSchema extends AnySchema, const TRetrievalR
|
|
|
642
678
|
getTriggeredHooks(): ReadonlyArray<TriggeredHook>;
|
|
643
679
|
}
|
|
644
680
|
//#endregion
|
|
645
|
-
export { CompiledMutation, DeleteBuilder, FindBuilder, IUnitOfWork, IUnitOfWorkRestricted, IndexColumns, IndexedConditionBuilder, IndexedJoinBuilder, InferIdColumnName, JoinFindBuilder, MutationOperation, MutationResult, RetrievalOperation, TypedUnitOfWork, UOWCompiler, UOWDecoder, UOWExecutor, UOWState, UnitOfWork, UnitOfWorkConfig, UpdateBuilder, UpdateManyBuilder, ValidIndexName, buildJoinIndexed, createUnitOfWork };
|
|
681
|
+
export { CompiledMutation, DeleteBuilder, FindBuilder, IUnitOfWork, IUnitOfWorkRestricted, IndexColumns, IndexedConditionBuilder, IndexedJoinBuilder, InferIdColumnName, JoinFindBuilder, MutationOperation, MutationResult, RetrievalOperation, TypedUnitOfWork, UOWCompiler, UOWDecoder, UOWExecutor, UOWInstrumentation, UOWInstrumentationContext, UOWInstrumentationFinalizer, UOWInstrumentationInjection, UOWInstrumentationPhase, UOWState, UnitOfWork, UnitOfWorkConfig, UpdateBuilder, UpdateManyBuilder, ValidIndexName, buildJoinIndexed, createUnitOfWork };
|
|
646
682
|
//# sourceMappingURL=unit-of-work.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unit-of-work.d.ts","names":[],"sources":["../../../src/query/unit-of-work/unit-of-work.ts"],"sourcesContent":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"unit-of-work.d.ts","names":[],"sources":["../../../src/query/unit-of-work/unit-of-work.ts"],"sourcesContent":[],"mappings":"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"}
|