@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
|
@@ -23,7 +23,7 @@ type InferJoinOut<T> =
|
|
|
23
23
|
type InferJoinOutPrettify<T> = RecursivePrettify<InferJoinOut<T>>;
|
|
24
24
|
|
|
25
25
|
describe("UnitOfWork type tests", () => {
|
|
26
|
-
const testSchema = schema((s) => {
|
|
26
|
+
const testSchema = schema("test", (s) => {
|
|
27
27
|
return s
|
|
28
28
|
.addTable("users", (t) => {
|
|
29
29
|
return t
|
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
type UOWCompiler,
|
|
5
5
|
type UOWDecoder,
|
|
6
6
|
createUnitOfWork,
|
|
7
|
+
UnitOfWork,
|
|
7
8
|
type InferIdColumnName,
|
|
8
9
|
type IndexColumns,
|
|
9
10
|
} from "./unit-of-work";
|
|
@@ -38,7 +39,7 @@ function createMockDecoder(): UOWDecoder {
|
|
|
38
39
|
|
|
39
40
|
describe("FindBuilder", () => {
|
|
40
41
|
it("should support primary index", () => {
|
|
41
|
-
const testSchema = schema((s) =>
|
|
42
|
+
const testSchema = schema("test", (s) =>
|
|
42
43
|
s.addTable("users", (t) =>
|
|
43
44
|
t
|
|
44
45
|
.addColumn("id", idColumn())
|
|
@@ -59,7 +60,7 @@ describe("FindBuilder", () => {
|
|
|
59
60
|
});
|
|
60
61
|
|
|
61
62
|
it("should support custom indexes", () => {
|
|
62
|
-
const testSchema = schema((s) =>
|
|
63
|
+
const testSchema = schema("test", (s) =>
|
|
63
64
|
s.addTable("users", (t) =>
|
|
64
65
|
t
|
|
65
66
|
.addColumn("id", idColumn())
|
|
@@ -82,7 +83,7 @@ describe("FindBuilder", () => {
|
|
|
82
83
|
});
|
|
83
84
|
|
|
84
85
|
it("should support cursor-based pagination", () => {
|
|
85
|
-
const testSchema = schema((s) =>
|
|
86
|
+
const testSchema = schema("test", (s) =>
|
|
86
87
|
s.addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string")),
|
|
87
88
|
);
|
|
88
89
|
|
|
@@ -102,7 +103,7 @@ describe("FindBuilder", () => {
|
|
|
102
103
|
});
|
|
103
104
|
|
|
104
105
|
it("should support backward cursor pagination", () => {
|
|
105
|
-
const testSchema = schema((s) =>
|
|
106
|
+
const testSchema = schema("test", (s) =>
|
|
106
107
|
s.addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string")),
|
|
107
108
|
);
|
|
108
109
|
|
|
@@ -122,7 +123,7 @@ describe("FindBuilder", () => {
|
|
|
122
123
|
});
|
|
123
124
|
|
|
124
125
|
it("should throw RangeError for pageSize <= 0", () => {
|
|
125
|
-
const testSchema = schema((s) =>
|
|
126
|
+
const testSchema = schema("test", (s) =>
|
|
126
127
|
s.addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string")),
|
|
127
128
|
);
|
|
128
129
|
|
|
@@ -142,7 +143,7 @@ describe("FindBuilder", () => {
|
|
|
142
143
|
});
|
|
143
144
|
|
|
144
145
|
it("should throw RangeError for non-integer pageSize", () => {
|
|
145
|
-
const testSchema = schema((s) =>
|
|
146
|
+
const testSchema = schema("test", (s) =>
|
|
146
147
|
s.addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string")),
|
|
147
148
|
);
|
|
148
149
|
|
|
@@ -166,7 +167,7 @@ describe("FindBuilder", () => {
|
|
|
166
167
|
});
|
|
167
168
|
|
|
168
169
|
it("should throw if index doesn't exist", () => {
|
|
169
|
-
const testSchema = schema((s) =>
|
|
170
|
+
const testSchema = schema("test", (s) =>
|
|
170
171
|
s.addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string")),
|
|
171
172
|
);
|
|
172
173
|
|
|
@@ -177,7 +178,7 @@ describe("FindBuilder", () => {
|
|
|
177
178
|
});
|
|
178
179
|
|
|
179
180
|
it("should throw if finalized without index", () => {
|
|
180
|
-
const testSchema = schema((s) =>
|
|
181
|
+
const testSchema = schema("test", (s) =>
|
|
181
182
|
s.addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string")),
|
|
182
183
|
);
|
|
183
184
|
|
|
@@ -190,7 +191,7 @@ describe("FindBuilder", () => {
|
|
|
190
191
|
});
|
|
191
192
|
|
|
192
193
|
it("should support count operations", () => {
|
|
193
|
-
const testSchema = schema((s) =>
|
|
194
|
+
const testSchema = schema("test", (s) =>
|
|
194
195
|
s.addTable("users", (t) =>
|
|
195
196
|
t.addColumn("id", idColumn()).addColumn("name", "string").addColumn("age", "integer"),
|
|
196
197
|
),
|
|
@@ -205,7 +206,7 @@ describe("FindBuilder", () => {
|
|
|
205
206
|
});
|
|
206
207
|
|
|
207
208
|
it("should throw when using both select and selectCount", () => {
|
|
208
|
-
const testSchema = schema((s) =>
|
|
209
|
+
const testSchema = schema("test", (s) =>
|
|
209
210
|
s.addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string")),
|
|
210
211
|
);
|
|
211
212
|
|
|
@@ -228,7 +229,7 @@ describe("FindBuilder", () => {
|
|
|
228
229
|
});
|
|
229
230
|
|
|
230
231
|
it("should support orderByIndex", () => {
|
|
231
|
-
const testSchema = schema((s) =>
|
|
232
|
+
const testSchema = schema("test", (s) =>
|
|
232
233
|
s.addTable("users", (t) =>
|
|
233
234
|
t
|
|
234
235
|
.addColumn("id", idColumn())
|
|
@@ -257,7 +258,7 @@ describe("FindBuilder", () => {
|
|
|
257
258
|
});
|
|
258
259
|
|
|
259
260
|
it("should support join operations", () => {
|
|
260
|
-
const testSchema = schema((s) =>
|
|
261
|
+
const testSchema = schema("test", (s) =>
|
|
261
262
|
s
|
|
262
263
|
.addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string"))
|
|
263
264
|
.addTable("posts", (t) =>
|
|
@@ -291,7 +292,7 @@ describe("FindBuilder", () => {
|
|
|
291
292
|
});
|
|
292
293
|
|
|
293
294
|
it("should support join operations without builder function", () => {
|
|
294
|
-
const testSchema = schema((s) =>
|
|
295
|
+
const testSchema = schema("test", (s) =>
|
|
295
296
|
s
|
|
296
297
|
.addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string"))
|
|
297
298
|
.addTable("posts", (t) =>
|
|
@@ -325,7 +326,7 @@ describe("FindBuilder", () => {
|
|
|
325
326
|
});
|
|
326
327
|
|
|
327
328
|
it("should support join with whereIndex", () => {
|
|
328
|
-
const testSchema = schema((s) =>
|
|
329
|
+
const testSchema = schema("test", (s) =>
|
|
329
330
|
s
|
|
330
331
|
.addTable("users", (t) =>
|
|
331
332
|
t
|
|
@@ -373,7 +374,7 @@ describe("FindBuilder", () => {
|
|
|
373
374
|
});
|
|
374
375
|
|
|
375
376
|
it("should support join with orderByIndex", () => {
|
|
376
|
-
const testSchema = schema((s) =>
|
|
377
|
+
const testSchema = schema("test", (s) =>
|
|
377
378
|
s
|
|
378
379
|
.addTable("users", (t) =>
|
|
379
380
|
t
|
|
@@ -418,7 +419,7 @@ describe("FindBuilder", () => {
|
|
|
418
419
|
});
|
|
419
420
|
|
|
420
421
|
it("should support join with pageSize", () => {
|
|
421
|
-
const testSchema = schema((s) =>
|
|
422
|
+
const testSchema = schema("test", (s) =>
|
|
422
423
|
s
|
|
423
424
|
.addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string"))
|
|
424
425
|
.addTable("posts", (t) =>
|
|
@@ -453,7 +454,7 @@ describe("FindBuilder", () => {
|
|
|
453
454
|
});
|
|
454
455
|
|
|
455
456
|
it("should throw RangeError for invalid pageSize in join", () => {
|
|
456
|
-
const testSchema = schema((s) =>
|
|
457
|
+
const testSchema = schema("test", (s) =>
|
|
457
458
|
s
|
|
458
459
|
.addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string"))
|
|
459
460
|
.addTable("posts", (t) =>
|
|
@@ -498,7 +499,7 @@ describe("FindBuilder", () => {
|
|
|
498
499
|
});
|
|
499
500
|
|
|
500
501
|
it("should support nested joins", () => {
|
|
501
|
-
const testSchema = schema((s) =>
|
|
502
|
+
const testSchema = schema("test", (s) =>
|
|
502
503
|
s
|
|
503
504
|
.addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string"))
|
|
504
505
|
.addTable("posts", (t) =>
|
|
@@ -564,7 +565,7 @@ describe("FindBuilder", () => {
|
|
|
564
565
|
});
|
|
565
566
|
|
|
566
567
|
describe("IndexedConditionBuilder", () => {
|
|
567
|
-
const testSchema = schema((s) =>
|
|
568
|
+
const testSchema = schema("test", (s) =>
|
|
568
569
|
s.addTable("users", (t) =>
|
|
569
570
|
t
|
|
570
571
|
.addColumn("id", idColumn())
|
|
@@ -585,7 +586,7 @@ describe("IndexedConditionBuilder", () => {
|
|
|
585
586
|
const indexedColumns = new Set<string>();
|
|
586
587
|
for (const index of Object.values(usersTable.indexes)) {
|
|
587
588
|
for (const col of index.columns) {
|
|
588
|
-
indexedColumns.add(col.
|
|
589
|
+
indexedColumns.add(col.name);
|
|
589
590
|
}
|
|
590
591
|
}
|
|
591
592
|
|
|
@@ -712,7 +713,7 @@ describe("IndexedConditionBuilder", () => {
|
|
|
712
713
|
describe("type safety", () => {
|
|
713
714
|
it("should restrict to only indexed columns at type level", () => {
|
|
714
715
|
// This schema has "bio" column that is NOT indexed
|
|
715
|
-
const typeTestSchema = schema((s) =>
|
|
716
|
+
const typeTestSchema = schema("typetest", (s) =>
|
|
716
717
|
s.addTable("users", (t) =>
|
|
717
718
|
t
|
|
718
719
|
.addColumn("id", idColumn())
|
|
@@ -770,7 +771,7 @@ describe("IndexedConditionBuilder", () => {
|
|
|
770
771
|
});
|
|
771
772
|
|
|
772
773
|
describe("UpdateBuilder with string ID", () => {
|
|
773
|
-
const testSchema = schema((s) =>
|
|
774
|
+
const testSchema = schema("test", (s) =>
|
|
774
775
|
s.addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string")),
|
|
775
776
|
);
|
|
776
777
|
|
|
@@ -806,7 +807,7 @@ describe("UpdateBuilder with string ID", () => {
|
|
|
806
807
|
});
|
|
807
808
|
|
|
808
809
|
describe("DeleteBuilder with string ID", () => {
|
|
809
|
-
const testSchema = schema((s) =>
|
|
810
|
+
const testSchema = schema("test", (s) =>
|
|
810
811
|
s.addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string")),
|
|
811
812
|
);
|
|
812
813
|
|
|
@@ -839,7 +840,7 @@ describe("DeleteBuilder with string ID", () => {
|
|
|
839
840
|
});
|
|
840
841
|
|
|
841
842
|
describe("generateId", () => {
|
|
842
|
-
const testSchema = schema((s) =>
|
|
843
|
+
const testSchema = schema("test", (s) =>
|
|
843
844
|
s.addTable("users", (t) =>
|
|
844
845
|
t.addColumn("id", idColumn()).addColumn("email", "string").addColumn("name", "string"),
|
|
845
846
|
),
|
|
@@ -903,7 +904,7 @@ describe("generateId", () => {
|
|
|
903
904
|
});
|
|
904
905
|
|
|
905
906
|
describe("getCreatedIds", () => {
|
|
906
|
-
const testSchema = schema((s) =>
|
|
907
|
+
const testSchema = schema("test", (s) =>
|
|
907
908
|
s.addTable("users", (t) =>
|
|
908
909
|
t.addColumn("id", idColumn()).addColumn("email", "string").addColumn("name", "string"),
|
|
909
910
|
),
|
|
@@ -1019,20 +1020,20 @@ describe("getCreatedIds", () => {
|
|
|
1019
1020
|
describe("Phase promises with multiple views", () => {
|
|
1020
1021
|
it("should return only operations added to the current view when using retrievalPhase promise", async () => {
|
|
1021
1022
|
// Create two separate schemas
|
|
1022
|
-
const schema1 = schema((s) =>
|
|
1023
|
+
const schema1 = schema("schema1", (s) =>
|
|
1023
1024
|
s.addTable("users", (t) =>
|
|
1024
1025
|
t.addColumn("id", idColumn()).addColumn("name", "string").addColumn("email", "string"),
|
|
1025
1026
|
),
|
|
1026
1027
|
);
|
|
1027
1028
|
|
|
1028
|
-
const schema2 = schema((s) =>
|
|
1029
|
+
const schema2 = schema("schema2", (s) =>
|
|
1029
1030
|
s.addTable("posts", (t) =>
|
|
1030
1031
|
t.addColumn("id", idColumn()).addColumn("title", "string").addColumn("content", "string"),
|
|
1031
1032
|
),
|
|
1032
1033
|
);
|
|
1033
1034
|
|
|
1034
1035
|
// Create a schema namespace map
|
|
1035
|
-
const schemaNamespaceMap = new WeakMap<typeof schema1 | typeof schema2, string>();
|
|
1036
|
+
const schemaNamespaceMap = new WeakMap<typeof schema1 | typeof schema2, string | null>();
|
|
1036
1037
|
schemaNamespaceMap.set(schema1, "namespace1");
|
|
1037
1038
|
schemaNamespaceMap.set(schema2, "namespace2");
|
|
1038
1039
|
|
|
@@ -1089,7 +1090,7 @@ describe("Phase promises with multiple views", () => {
|
|
|
1089
1090
|
});
|
|
1090
1091
|
|
|
1091
1092
|
it("should isolate operations when getUnitOfWork is called multiple times with same schema", async () => {
|
|
1092
|
-
const testSchema = schema((s) =>
|
|
1093
|
+
const testSchema = schema("test", (s) =>
|
|
1093
1094
|
s.addTable("users", (t) =>
|
|
1094
1095
|
t.addColumn("id", idColumn()).addColumn("name", "string").addColumn("email", "string"),
|
|
1095
1096
|
),
|
|
@@ -1135,19 +1136,19 @@ describe("Phase promises with multiple views", () => {
|
|
|
1135
1136
|
});
|
|
1136
1137
|
|
|
1137
1138
|
it("should show that getCreatedIds returns ALL created IDs regardless of which view created them", async () => {
|
|
1138
|
-
const schema1 = schema((s) =>
|
|
1139
|
+
const schema1 = schema("schema1", (s) =>
|
|
1139
1140
|
s.addTable("users", (t) =>
|
|
1140
1141
|
t.addColumn("id", idColumn()).addColumn("name", "string").addColumn("email", "string"),
|
|
1141
1142
|
),
|
|
1142
1143
|
);
|
|
1143
1144
|
|
|
1144
|
-
const schema2 = schema((s) =>
|
|
1145
|
+
const schema2 = schema("schema2", (s) =>
|
|
1145
1146
|
s.addTable("posts", (t) =>
|
|
1146
1147
|
t.addColumn("id", idColumn()).addColumn("title", "string").addColumn("content", "string"),
|
|
1147
1148
|
),
|
|
1148
1149
|
);
|
|
1149
1150
|
|
|
1150
|
-
const schemaNamespaceMap = new WeakMap<typeof schema1 | typeof schema2, string>();
|
|
1151
|
+
const schemaNamespaceMap = new WeakMap<typeof schema1 | typeof schema2, string | null>();
|
|
1151
1152
|
schemaNamespaceMap.set(schema1, "namespace1");
|
|
1152
1153
|
schemaNamespaceMap.set(schema2, "namespace2");
|
|
1153
1154
|
|
|
@@ -1190,19 +1191,19 @@ describe("Phase promises with multiple views", () => {
|
|
|
1190
1191
|
});
|
|
1191
1192
|
|
|
1192
1193
|
it("should generate unique IDs when multiple views create items", async () => {
|
|
1193
|
-
const schema1 = schema((s) =>
|
|
1194
|
+
const schema1 = schema("schema1", (s) =>
|
|
1194
1195
|
s.addTable("users", (t) =>
|
|
1195
1196
|
t.addColumn("id", idColumn()).addColumn("name", "string").addColumn("email", "string"),
|
|
1196
1197
|
),
|
|
1197
1198
|
);
|
|
1198
1199
|
|
|
1199
|
-
const schema2 = schema((s) =>
|
|
1200
|
+
const schema2 = schema("schema2", (s) =>
|
|
1200
1201
|
s.addTable("posts", (t) =>
|
|
1201
1202
|
t.addColumn("id", idColumn()).addColumn("title", "string").addColumn("content", "string"),
|
|
1202
1203
|
),
|
|
1203
1204
|
);
|
|
1204
1205
|
|
|
1205
|
-
const schemaNamespaceMap = new WeakMap<typeof schema1 | typeof schema2, string>();
|
|
1206
|
+
const schemaNamespaceMap = new WeakMap<typeof schema1 | typeof schema2, string | null>();
|
|
1206
1207
|
schemaNamespaceMap.set(schema1, "namespace1");
|
|
1207
1208
|
schemaNamespaceMap.set(schema2, "namespace2");
|
|
1208
1209
|
|
|
@@ -1257,8 +1258,138 @@ describe("Phase promises with multiple views", () => {
|
|
|
1257
1258
|
});
|
|
1258
1259
|
});
|
|
1259
1260
|
|
|
1261
|
+
describe("Instrumentation", () => {
|
|
1262
|
+
const testSchema = schema("test", (s) =>
|
|
1263
|
+
s.addTable("users", (t) =>
|
|
1264
|
+
t.addColumn("id", idColumn()).addColumn("name", "string").addColumn("email", "string"),
|
|
1265
|
+
),
|
|
1266
|
+
);
|
|
1267
|
+
|
|
1268
|
+
it("should run instrumentation hooks around retrieve and mutate phases", async () => {
|
|
1269
|
+
const calls: string[] = [];
|
|
1270
|
+
const contexts: Array<{
|
|
1271
|
+
phase: string;
|
|
1272
|
+
idempotencyKey: string;
|
|
1273
|
+
retrievalOpsCount: number;
|
|
1274
|
+
mutationOpsCount: number;
|
|
1275
|
+
}> = [];
|
|
1276
|
+
|
|
1277
|
+
const executor = {
|
|
1278
|
+
executeRetrievalPhase: async () => [[]],
|
|
1279
|
+
executeMutationPhase: async () => ({ success: true, createdInternalIds: [] }),
|
|
1280
|
+
};
|
|
1281
|
+
|
|
1282
|
+
const uow = new UnitOfWork(createMockCompiler(), executor, createMockDecoder(), undefined, {
|
|
1283
|
+
instrumentation: {
|
|
1284
|
+
beforeRetrieve: (ctx) => {
|
|
1285
|
+
calls.push("beforeRetrieve");
|
|
1286
|
+
contexts.push({
|
|
1287
|
+
phase: ctx.phase,
|
|
1288
|
+
idempotencyKey: ctx.idempotencyKey,
|
|
1289
|
+
retrievalOpsCount: ctx.retrievalOpsCount,
|
|
1290
|
+
mutationOpsCount: ctx.mutationOpsCount,
|
|
1291
|
+
});
|
|
1292
|
+
},
|
|
1293
|
+
afterRetrieve: (ctx) => {
|
|
1294
|
+
calls.push("afterRetrieve");
|
|
1295
|
+
contexts.push({
|
|
1296
|
+
phase: ctx.phase,
|
|
1297
|
+
idempotencyKey: ctx.idempotencyKey,
|
|
1298
|
+
retrievalOpsCount: ctx.retrievalOpsCount,
|
|
1299
|
+
mutationOpsCount: ctx.mutationOpsCount,
|
|
1300
|
+
});
|
|
1301
|
+
},
|
|
1302
|
+
beforeMutate: (ctx) => {
|
|
1303
|
+
calls.push("beforeMutate");
|
|
1304
|
+
contexts.push({
|
|
1305
|
+
phase: ctx.phase,
|
|
1306
|
+
idempotencyKey: ctx.idempotencyKey,
|
|
1307
|
+
retrievalOpsCount: ctx.retrievalOpsCount,
|
|
1308
|
+
mutationOpsCount: ctx.mutationOpsCount,
|
|
1309
|
+
});
|
|
1310
|
+
},
|
|
1311
|
+
afterMutate: (ctx) => {
|
|
1312
|
+
calls.push("afterMutate");
|
|
1313
|
+
contexts.push({
|
|
1314
|
+
phase: ctx.phase,
|
|
1315
|
+
idempotencyKey: ctx.idempotencyKey,
|
|
1316
|
+
retrievalOpsCount: ctx.retrievalOpsCount,
|
|
1317
|
+
mutationOpsCount: ctx.mutationOpsCount,
|
|
1318
|
+
});
|
|
1319
|
+
},
|
|
1320
|
+
},
|
|
1321
|
+
});
|
|
1322
|
+
|
|
1323
|
+
const typed = uow.forSchema(testSchema);
|
|
1324
|
+
typed.find("users", (b) => b.whereIndex("primary"));
|
|
1325
|
+
typed.create("users", { name: "Alice", email: "alice@example.com" });
|
|
1326
|
+
|
|
1327
|
+
await uow.executeRetrieve();
|
|
1328
|
+
await uow.executeMutations();
|
|
1329
|
+
|
|
1330
|
+
expect(calls).toEqual(["beforeRetrieve", "afterRetrieve", "beforeMutate", "afterMutate"]);
|
|
1331
|
+
|
|
1332
|
+
for (const ctx of contexts) {
|
|
1333
|
+
expect(ctx.idempotencyKey).toBeTypeOf("string");
|
|
1334
|
+
expect(ctx.idempotencyKey.length).toBeGreaterThan(0);
|
|
1335
|
+
expect(ctx.retrievalOpsCount).toBe(1);
|
|
1336
|
+
expect(ctx.mutationOpsCount).toBe(1);
|
|
1337
|
+
}
|
|
1338
|
+
});
|
|
1339
|
+
|
|
1340
|
+
it("should short-circuit mutations on conflict injection", async () => {
|
|
1341
|
+
let mutationExecuted = false;
|
|
1342
|
+
|
|
1343
|
+
const executor = {
|
|
1344
|
+
executeRetrievalPhase: async () => [],
|
|
1345
|
+
executeMutationPhase: async () => {
|
|
1346
|
+
mutationExecuted = true;
|
|
1347
|
+
return { success: true, createdInternalIds: [] };
|
|
1348
|
+
},
|
|
1349
|
+
};
|
|
1350
|
+
|
|
1351
|
+
const uow = new UnitOfWork(createMockCompiler(), executor, createMockDecoder(), undefined, {
|
|
1352
|
+
instrumentation: {
|
|
1353
|
+
beforeMutate: () => ({ type: "conflict", reason: "Injected conflict" }),
|
|
1354
|
+
afterMutate: () => {
|
|
1355
|
+
throw new Error("afterMutate should not run");
|
|
1356
|
+
},
|
|
1357
|
+
},
|
|
1358
|
+
});
|
|
1359
|
+
|
|
1360
|
+
uow.forSchema(testSchema).create("users", { name: "Alice", email: "alice@example.com" });
|
|
1361
|
+
|
|
1362
|
+
const result = await uow.executeMutations();
|
|
1363
|
+
expect(result.success).toBe(false);
|
|
1364
|
+
expect(mutationExecuted).toBe(false);
|
|
1365
|
+
});
|
|
1366
|
+
|
|
1367
|
+
it("should throw on error injection before retrieval", async () => {
|
|
1368
|
+
let retrievalExecuted = false;
|
|
1369
|
+
|
|
1370
|
+
const executor = {
|
|
1371
|
+
executeRetrievalPhase: async () => {
|
|
1372
|
+
retrievalExecuted = true;
|
|
1373
|
+
return [];
|
|
1374
|
+
},
|
|
1375
|
+
executeMutationPhase: async () => ({ success: true, createdInternalIds: [] }),
|
|
1376
|
+
};
|
|
1377
|
+
|
|
1378
|
+
const uow = new UnitOfWork(createMockCompiler(), executor, createMockDecoder(), undefined, {
|
|
1379
|
+
instrumentation: {
|
|
1380
|
+
beforeRetrieve: () => ({ type: "error", error: new Error("Injected failure") }),
|
|
1381
|
+
},
|
|
1382
|
+
});
|
|
1383
|
+
|
|
1384
|
+
uow.forSchema(testSchema).find("users", (b) => b.whereIndex("primary"));
|
|
1385
|
+
|
|
1386
|
+
await expect(uow.executeRetrieve()).rejects.toThrow("Injected failure");
|
|
1387
|
+
expect(retrievalExecuted).toBe(false);
|
|
1388
|
+
});
|
|
1389
|
+
});
|
|
1390
|
+
|
|
1260
1391
|
describe("Error Handling", () => {
|
|
1261
|
-
const testSchema = schema((s) =>
|
|
1392
|
+
const testSchema = schema("test", (s) =>
|
|
1262
1393
|
s.addTable("users", (t) =>
|
|
1263
1394
|
t.addColumn("id", idColumn()).addColumn("name", "string").addColumn("email", "string"),
|
|
1264
1395
|
),
|
|
@@ -1543,7 +1674,7 @@ describe("Error Handling", () => {
|
|
|
1543
1674
|
});
|
|
1544
1675
|
|
|
1545
1676
|
describe("findFirst convenience method", () => {
|
|
1546
|
-
const testSchema = schema((s) =>
|
|
1677
|
+
const testSchema = schema("test", (s) =>
|
|
1547
1678
|
s
|
|
1548
1679
|
.addTable("users", (t) =>
|
|
1549
1680
|
t
|