@fragno-dev/db 0.2.1 → 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 +206 -140
- package/CHANGELOG.md +67 -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 +38 -28
- 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 +45 -96
- package/dist/db-fragment-definition-builder.d.ts.map +1 -1
- package/dist/db-fragment-definition-builder.js +121 -99
- 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 +172 -9
- package/dist/fragments/internal-fragment.d.ts.map +1 -1
- package/dist/fragments/internal-fragment.js +193 -74
- 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 +47 -4
- package/dist/hooks/hooks.d.ts.map +1 -1
- package/dist/hooks/hooks.js +106 -39
- 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 +17 -10
- 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 +351 -100
- 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 +440 -267
- 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 +67 -22
- package/dist/query/unit-of-work/unit-of-work.d.ts.map +1 -1
- package/dist/query/unit-of-work/unit-of-work.js +110 -13
- package/dist/query/unit-of-work/unit-of-work.js.map +1 -1
- package/dist/query/value-decoding.js +8 -5
- 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 +40 -14
- package/dist/schema/create.d.ts.map +1 -1
- package/dist/schema/create.js +82 -42
- package/dist/schema/create.js.map +1 -1
- package/dist/schema/generate-id.d.ts +20 -0
- package/dist/schema/generate-id.d.ts.map +1 -0
- package/dist/schema/generate-id.js +28 -0
- package/dist/schema/generate-id.js.map +1 -0
- 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} +49 -35
- package/src/adapters/{drizzle/drizzle-adapter-sqlite3.test.ts → generic-sql/sql-adapter-sqlite3-uow.test.ts} +48 -32
- 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 +88 -54
- package/src/db-fragment-definition-builder.ts +201 -322
- package/src/db-fragment-instantiator.test.ts +169 -101
- package/src/db-fragment-integration.test.ts +301 -149
- 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 +730 -274
- package/src/fragments/internal-fragment.ts +447 -154
- 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 +411 -259
- package/src/hooks/hooks.ts +265 -66
- 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 +78 -30
- 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 +1512 -1458
- package/src/query/unit-of-work/execute-unit-of-work.ts +1708 -596
- package/src/query/unit-of-work/tx-builder.test.ts +1041 -0
- package/src/query/unit-of-work/unit-of-work-coordinator.test.ts +32 -32
- 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 +231 -36
- package/src/query/unit-of-work/unit-of-work.ts +229 -31
- 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 +187 -47
- package/src/schema/generate-id.test.ts +57 -0
- package/src/schema/generate-id.ts +38 -0
- 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
- package/src/shared/config.ts +0 -10
- package/src/shared/connection-pool.ts +0 -24
- package/src/shared/prisma.ts +0 -45
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { generateId } from "../../schema/generate-id.js";
|
|
1
2
|
import { FragnoId } from "../../schema/create.js";
|
|
2
|
-
import { buildCondition } from "../condition-builder.js";
|
|
3
3
|
import { Cursor } from "../cursor.js";
|
|
4
|
+
import { buildCondition } from "../condition-builder.js";
|
|
4
5
|
|
|
5
6
|
//#region src/query/unit-of-work/unit-of-work.ts
|
|
6
7
|
/**
|
|
@@ -303,7 +304,7 @@ function buildJoinIndexed(table, fn) {
|
|
|
303
304
|
for (const name in table.relations) {
|
|
304
305
|
const relation = table.relations[name];
|
|
305
306
|
builder[name] = (builderFn) => {
|
|
306
|
-
const joinBuilder = new JoinFindBuilder(relation.table.
|
|
307
|
+
const joinBuilder = new JoinFindBuilder(relation.table.name, relation.table);
|
|
307
308
|
if (builderFn) builderFn(joinBuilder);
|
|
308
309
|
const config = joinBuilder.build();
|
|
309
310
|
let conditions;
|
|
@@ -345,6 +346,11 @@ function buildJoinIndexed(table, fn) {
|
|
|
345
346
|
function createUnitOfWork(compiler, executor, decoder, schemaNamespaceMap, name) {
|
|
346
347
|
return new UnitOfWork(compiler, executor, decoder, name, void 0, schemaNamespaceMap);
|
|
347
348
|
}
|
|
349
|
+
function isUowInstrumentationInjection(value) {
|
|
350
|
+
if (!value || typeof value !== "object") return false;
|
|
351
|
+
const injection = value;
|
|
352
|
+
return injection.type === "conflict" || injection.type === "error";
|
|
353
|
+
}
|
|
348
354
|
/**
|
|
349
355
|
* Encapsulates a promise with its resolver/rejecter functions.
|
|
350
356
|
* Simplifies management of deferred promises with built-in error handling.
|
|
@@ -535,7 +541,7 @@ var UOWChildCoordinator = class {
|
|
|
535
541
|
var UnitOfWork = class UnitOfWork {
|
|
536
542
|
#name;
|
|
537
543
|
#config;
|
|
538
|
-
#
|
|
544
|
+
#idempotencyKey;
|
|
539
545
|
#state = "building-retrieval";
|
|
540
546
|
#retrievalOps = [];
|
|
541
547
|
#mutationOps = [];
|
|
@@ -558,7 +564,40 @@ var UnitOfWork = class UnitOfWork {
|
|
|
558
564
|
this.#schemaNamespaceMap = schemaNamespaceMap ?? /* @__PURE__ */ new WeakMap();
|
|
559
565
|
this.#name = name;
|
|
560
566
|
this.#config = config;
|
|
561
|
-
this.#
|
|
567
|
+
this.#idempotencyKey = config?.idempotencyKey ?? crypto.randomUUID();
|
|
568
|
+
}
|
|
569
|
+
#createInstrumentationContext(phase) {
|
|
570
|
+
return {
|
|
571
|
+
phase,
|
|
572
|
+
uowName: this.#name,
|
|
573
|
+
idempotencyKey: this.#idempotencyKey,
|
|
574
|
+
retrievalOpsCount: this.#retrievalOps.length,
|
|
575
|
+
mutationOpsCount: this.#mutationOps.length,
|
|
576
|
+
uow: this
|
|
577
|
+
};
|
|
578
|
+
}
|
|
579
|
+
async #runInstrumentation(phase) {
|
|
580
|
+
const hook = this.#config?.instrumentation?.[phase];
|
|
581
|
+
if (!hook) return null;
|
|
582
|
+
const result = await hook(this.#createInstrumentationContext(phase));
|
|
583
|
+
if (isUowInstrumentationInjection(result)) return result;
|
|
584
|
+
return null;
|
|
585
|
+
}
|
|
586
|
+
async #runInstrumentationFinalizer(phase) {
|
|
587
|
+
const hook = this.#config?.instrumentationFinalizer?.[phase];
|
|
588
|
+
if (!hook) return;
|
|
589
|
+
await hook(this.#createInstrumentationContext(phase));
|
|
590
|
+
}
|
|
591
|
+
#handleRetrieveInjection(injection) {
|
|
592
|
+
if (injection.type === "error") throw injection.error;
|
|
593
|
+
throw new Error(injection.reason ?? "Injected conflict");
|
|
594
|
+
}
|
|
595
|
+
#handleMutationInjection(injection) {
|
|
596
|
+
if (injection.type === "error") throw injection.error;
|
|
597
|
+
this.#state = "executed";
|
|
598
|
+
this.#createdInternalIds.length = 0;
|
|
599
|
+
this.#mutationPhaseDeferred.resolve();
|
|
600
|
+
return { success: false };
|
|
562
601
|
}
|
|
563
602
|
/**
|
|
564
603
|
* Register a schema with its namespace for cross-fragment operations.
|
|
@@ -592,7 +631,7 @@ var UnitOfWork = class UnitOfWork {
|
|
|
592
631
|
const readyFor = options?.readyFor ?? "mutation";
|
|
593
632
|
const child = new UnitOfWork(this.#compiler, this.#executor, this.#decoder, this.#name, {
|
|
594
633
|
...this.#config,
|
|
595
|
-
|
|
634
|
+
idempotencyKey: this.#idempotencyKey
|
|
596
635
|
}, this.#schemaNamespaceMap);
|
|
597
636
|
child.#coordinator.setAsRestricted(this, this.#coordinator);
|
|
598
637
|
child.#retrievalOps = this.#retrievalOps;
|
|
@@ -663,8 +702,8 @@ var UnitOfWork = class UnitOfWork {
|
|
|
663
702
|
get name() {
|
|
664
703
|
return this.#name;
|
|
665
704
|
}
|
|
666
|
-
get
|
|
667
|
-
return this.#
|
|
705
|
+
get idempotencyKey() {
|
|
706
|
+
return this.#idempotencyKey;
|
|
668
707
|
}
|
|
669
708
|
/**
|
|
670
709
|
* Promise that resolves when the retrieval phase is executed
|
|
@@ -687,11 +726,18 @@ var UnitOfWork = class UnitOfWork {
|
|
|
687
726
|
async executeRetrieve() {
|
|
688
727
|
if (this.#coordinator.isRestricted) throw new Error("executeRetrieve() cannot be called on restricted child UOWs");
|
|
689
728
|
if (this.#state !== "building-retrieval") throw new Error(`Cannot execute retrieval from state ${this.#state}. Must be in building-retrieval state.`);
|
|
729
|
+
let afterRan = false;
|
|
730
|
+
let failed = false;
|
|
690
731
|
try {
|
|
691
732
|
await this.#coordinator.retrievalReadinessPromise;
|
|
733
|
+
const beforeInjection = await this.#runInstrumentation("beforeRetrieve");
|
|
734
|
+
if (beforeInjection) return this.#handleRetrieveInjection(beforeInjection);
|
|
692
735
|
if (this.#retrievalOps.length === 0) {
|
|
693
736
|
this.#state = "building-mutation";
|
|
694
737
|
const emptyResults = [];
|
|
738
|
+
afterRan = true;
|
|
739
|
+
const afterInjection$1 = await this.#runInstrumentation("afterRetrieve");
|
|
740
|
+
if (afterInjection$1) return this.#handleRetrieveInjection(afterInjection$1);
|
|
695
741
|
this.#retrievalPhaseDeferred.resolve(emptyResults);
|
|
696
742
|
return emptyResults;
|
|
697
743
|
}
|
|
@@ -706,17 +752,31 @@ var UnitOfWork = class UnitOfWork {
|
|
|
706
752
|
if (this.#config?.dryRun) {
|
|
707
753
|
this.#state = "executed";
|
|
708
754
|
const emptyResults = [];
|
|
755
|
+
afterRan = true;
|
|
756
|
+
const afterInjection$1 = await this.#runInstrumentation("afterRetrieve");
|
|
757
|
+
if (afterInjection$1) return this.#handleRetrieveInjection(afterInjection$1);
|
|
709
758
|
this.#retrievalPhaseDeferred.resolve(emptyResults);
|
|
710
759
|
return emptyResults;
|
|
711
760
|
}
|
|
712
761
|
const rawResults = await this.#executor.executeRetrievalPhase(retrievalBatch);
|
|
713
762
|
this.#retrievalResults = this.#decoder.decode(rawResults, this.#retrievalOps);
|
|
714
763
|
this.#state = "building-mutation";
|
|
764
|
+
afterRan = true;
|
|
765
|
+
const afterInjection = await this.#runInstrumentation("afterRetrieve");
|
|
766
|
+
if (afterInjection) return this.#handleRetrieveInjection(afterInjection);
|
|
715
767
|
this.#retrievalPhaseDeferred.resolve(this.#retrievalResults);
|
|
716
768
|
return this.#retrievalResults;
|
|
717
769
|
} catch (error) {
|
|
718
770
|
this.#retrievalError = error instanceof Error ? error : new Error(String(error));
|
|
771
|
+
failed = true;
|
|
719
772
|
throw error;
|
|
773
|
+
} finally {
|
|
774
|
+
try {
|
|
775
|
+
await this.#runInstrumentationFinalizer("afterRetrieve");
|
|
776
|
+
} catch {}
|
|
777
|
+
if (!afterRan && failed) try {
|
|
778
|
+
await this.#runInstrumentation("afterRetrieve");
|
|
779
|
+
} catch {}
|
|
720
780
|
}
|
|
721
781
|
}
|
|
722
782
|
/**
|
|
@@ -726,18 +786,26 @@ var UnitOfWork = class UnitOfWork {
|
|
|
726
786
|
async executeMutations() {
|
|
727
787
|
if (this.#coordinator.isRestricted) throw new Error("executeMutations() cannot be called on restricted child UOWs");
|
|
728
788
|
if (this.#state === "executed") throw new Error(`Cannot execute mutations from state ${this.#state}.`);
|
|
789
|
+
let afterRan = false;
|
|
790
|
+
let failed = false;
|
|
729
791
|
try {
|
|
730
792
|
await this.#coordinator.mutationReadinessPromise;
|
|
793
|
+
const beforeInjection = await this.#runInstrumentation("beforeMutate");
|
|
794
|
+
if (beforeInjection) return this.#handleMutationInjection(beforeInjection);
|
|
731
795
|
const mutationBatch = [];
|
|
732
796
|
for (const op of this.#mutationOps) {
|
|
733
797
|
const compiled = this.#compiler.compileMutationOperation(op);
|
|
734
798
|
if (compiled !== null) {
|
|
799
|
+
compiled.uowId = this.#idempotencyKey;
|
|
735
800
|
this.#config?.onQuery?.(compiled);
|
|
736
801
|
mutationBatch.push(compiled);
|
|
737
802
|
}
|
|
738
803
|
}
|
|
739
804
|
if (this.#config?.dryRun) {
|
|
740
805
|
this.#state = "executed";
|
|
806
|
+
afterRan = true;
|
|
807
|
+
const afterInjection$1 = await this.#runInstrumentation("afterMutate");
|
|
808
|
+
if (afterInjection$1) return this.#handleMutationInjection(afterInjection$1);
|
|
741
809
|
this.#mutationPhaseDeferred.resolve();
|
|
742
810
|
return { success: true };
|
|
743
811
|
}
|
|
@@ -747,11 +815,22 @@ var UnitOfWork = class UnitOfWork {
|
|
|
747
815
|
this.#createdInternalIds.length = 0;
|
|
748
816
|
this.#createdInternalIds.push(...result.createdInternalIds);
|
|
749
817
|
}
|
|
818
|
+
afterRan = true;
|
|
819
|
+
const afterInjection = await this.#runInstrumentation("afterMutate");
|
|
820
|
+
if (afterInjection) return this.#handleMutationInjection(afterInjection);
|
|
750
821
|
this.#mutationPhaseDeferred.resolve();
|
|
751
822
|
return { success: result.success };
|
|
752
823
|
} catch (error) {
|
|
753
824
|
this.#mutationError = error instanceof Error ? error : new Error(String(error));
|
|
825
|
+
failed = true;
|
|
754
826
|
throw error;
|
|
827
|
+
} finally {
|
|
828
|
+
try {
|
|
829
|
+
await this.#runInstrumentationFinalizer("afterMutate");
|
|
830
|
+
} catch {}
|
|
831
|
+
if (!afterRan && failed) try {
|
|
832
|
+
await this.#runInstrumentation("afterMutate");
|
|
833
|
+
} catch {}
|
|
755
834
|
}
|
|
756
835
|
}
|
|
757
836
|
/**
|
|
@@ -819,7 +898,10 @@ var UnitOfWork = class UnitOfWork {
|
|
|
819
898
|
const mutationBatch = [];
|
|
820
899
|
for (const op of this.#mutationOps) {
|
|
821
900
|
const compiled = compiler.compileMutationOperation(op);
|
|
822
|
-
if (compiled !== null)
|
|
901
|
+
if (compiled !== null) {
|
|
902
|
+
compiled.uowId = this.#idempotencyKey;
|
|
903
|
+
mutationBatch.push(compiled);
|
|
904
|
+
}
|
|
823
905
|
}
|
|
824
906
|
return {
|
|
825
907
|
name: this.#name,
|
|
@@ -853,8 +935,8 @@ var TypedUnitOfWork = class {
|
|
|
853
935
|
get name() {
|
|
854
936
|
return this.#uow.name;
|
|
855
937
|
}
|
|
856
|
-
get
|
|
857
|
-
return this.#uow.
|
|
938
|
+
get idempotencyKey() {
|
|
939
|
+
return this.#uow.idempotencyKey;
|
|
858
940
|
}
|
|
859
941
|
get state() {
|
|
860
942
|
return this.#uow.state;
|
|
@@ -966,22 +1048,37 @@ var TypedUnitOfWork = class {
|
|
|
966
1048
|
this.#operationIndices.push(operationIndex);
|
|
967
1049
|
return this;
|
|
968
1050
|
}
|
|
1051
|
+
/**
|
|
1052
|
+
* Generate a new ID for a table without creating a record.
|
|
1053
|
+
* This is useful when you need to reference an ID before actually creating the record,
|
|
1054
|
+
* or when you need to pass the ID to external services.
|
|
1055
|
+
*
|
|
1056
|
+
* @example
|
|
1057
|
+
* ```ts
|
|
1058
|
+
* const userId = uow.generateId("users");
|
|
1059
|
+
* // Use userId in related records or pass to external services
|
|
1060
|
+
* uow.create("users", { id: userId, name: "John" });
|
|
1061
|
+
* ```
|
|
1062
|
+
*/
|
|
1063
|
+
generateId(tableName) {
|
|
1064
|
+
return generateId(this.#schema, tableName);
|
|
1065
|
+
}
|
|
969
1066
|
create(tableName, values) {
|
|
970
1067
|
const tableSchema = this.#schema.tables[tableName];
|
|
971
1068
|
if (!tableSchema) throw new Error(`Table ${tableName} not found in schema`);
|
|
972
1069
|
const idColumn = tableSchema.getIdColumn();
|
|
973
1070
|
let externalId;
|
|
974
1071
|
let updatedValues = values;
|
|
975
|
-
const providedIdValue = values[idColumn.
|
|
1072
|
+
const providedIdValue = values[idColumn.name];
|
|
976
1073
|
if (providedIdValue !== void 0) if (typeof providedIdValue === "object" && providedIdValue !== null && "externalId" in providedIdValue) externalId = providedIdValue.externalId;
|
|
977
1074
|
else externalId = providedIdValue;
|
|
978
1075
|
else {
|
|
979
1076
|
const generated = idColumn.generateDefaultValue();
|
|
980
|
-
if (generated === void 0) throw new Error(`No ID value provided and ID column ${idColumn.
|
|
1077
|
+
if (generated === void 0) throw new Error(`No ID value provided and ID column ${idColumn.name} has no default generator`);
|
|
981
1078
|
externalId = generated;
|
|
982
1079
|
updatedValues = {
|
|
983
1080
|
...values,
|
|
984
|
-
[idColumn.
|
|
1081
|
+
[idColumn.name]: externalId
|
|
985
1082
|
};
|
|
986
1083
|
}
|
|
987
1084
|
this.#uow.addMutationOperation({
|