@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
|
@@ -5,6 +5,7 @@ import type {
|
|
|
5
5
|
UOWCompiler,
|
|
6
6
|
UOWDecoder,
|
|
7
7
|
UOWExecutor,
|
|
8
|
+
UOWInstrumentation,
|
|
8
9
|
ValidIndexName,
|
|
9
10
|
} from "../../query/unit-of-work/unit-of-work";
|
|
10
11
|
import { UnitOfWork } from "../../query/unit-of-work/unit-of-work";
|
|
@@ -25,6 +26,7 @@ export interface UnitOfWorkConfig {
|
|
|
25
26
|
* since those have to be manually executed.
|
|
26
27
|
*/
|
|
27
28
|
dryRun?: boolean;
|
|
29
|
+
instrumentation?: UOWInstrumentation;
|
|
28
30
|
}
|
|
29
31
|
|
|
30
32
|
/**
|
|
@@ -50,7 +52,7 @@ export interface UnitOfWorkFactory {
|
|
|
50
52
|
/**
|
|
51
53
|
* Optional WeakMap for schema-to-namespace lookups
|
|
52
54
|
*/
|
|
53
|
-
schemaNamespaceMap?: WeakMap<AnySchema, string>;
|
|
55
|
+
schemaNamespaceMap?: WeakMap<AnySchema, string | null>;
|
|
54
56
|
}
|
|
55
57
|
|
|
56
58
|
/**
|
|
@@ -8,7 +8,7 @@ import type {
|
|
|
8
8
|
} from "../../query/unit-of-work/unit-of-work";
|
|
9
9
|
import { Cursor } from "../../query/cursor";
|
|
10
10
|
import type { DriverConfig } from "../generic-sql/driver-config";
|
|
11
|
-
import {
|
|
11
|
+
import { createNamingResolver, type NamingResolver } from "../../naming/sql-naming";
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* Options for compiling a find operation with cursor pagination
|
|
@@ -55,24 +55,24 @@ export interface CursorConditionResult {
|
|
|
55
55
|
*/
|
|
56
56
|
export abstract class UOWOperationCompiler<TCompiledQuery> {
|
|
57
57
|
#driverConfig: DriverConfig;
|
|
58
|
-
#
|
|
58
|
+
#resolverFactory?: (schema: AnySchema, namespace: string | null) => NamingResolver;
|
|
59
59
|
|
|
60
60
|
constructor(
|
|
61
61
|
driverConfig: DriverConfig,
|
|
62
|
-
|
|
62
|
+
resolverFactory?: (schema: AnySchema, namespace: string | null) => NamingResolver,
|
|
63
63
|
) {
|
|
64
64
|
this.#driverConfig = driverConfig;
|
|
65
|
-
this.#
|
|
65
|
+
this.#resolverFactory = resolverFactory;
|
|
66
66
|
}
|
|
67
67
|
|
|
68
68
|
protected get driverConfig(): DriverConfig {
|
|
69
69
|
return this.#driverConfig;
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
-
protected get
|
|
73
|
-
| ((namespace: string |
|
|
72
|
+
protected get resolverFactory():
|
|
73
|
+
| ((schema: AnySchema, namespace: string | null) => NamingResolver)
|
|
74
74
|
| undefined {
|
|
75
|
-
return this.#
|
|
75
|
+
return this.#resolverFactory;
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
abstract compileCount(
|
|
@@ -105,12 +105,18 @@ export abstract class UOWOperationCompiler<TCompiledQuery> {
|
|
|
105
105
|
/**
|
|
106
106
|
* Get the mapper for a specific operation based on its namespace
|
|
107
107
|
*/
|
|
108
|
-
protected
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
108
|
+
protected getNamingResolver(
|
|
109
|
+
schema: AnySchema,
|
|
110
|
+
namespace: string | null | undefined,
|
|
111
|
+
): NamingResolver {
|
|
112
|
+
if (this.#resolverFactory) {
|
|
113
|
+
return this.#resolverFactory(schema, namespace ?? null);
|
|
114
|
+
}
|
|
115
|
+
return createNamingResolver(
|
|
116
|
+
schema,
|
|
117
|
+
namespace ?? null,
|
|
118
|
+
this.#driverConfig.defaultNamingStrategy,
|
|
119
|
+
);
|
|
114
120
|
}
|
|
115
121
|
|
|
116
122
|
/**
|
|
@@ -154,9 +160,13 @@ export abstract class UOWOperationCompiler<TCompiledQuery> {
|
|
|
154
160
|
/**
|
|
155
161
|
* Get the physical table name for an operation, applying namespace mapping if needed
|
|
156
162
|
*/
|
|
157
|
-
protected getPhysicalTableName(
|
|
158
|
-
|
|
159
|
-
|
|
163
|
+
protected getPhysicalTableName(
|
|
164
|
+
schema: AnySchema,
|
|
165
|
+
logicalName: string,
|
|
166
|
+
namespace: string | undefined,
|
|
167
|
+
): string {
|
|
168
|
+
const resolver = this.getNamingResolver(schema, namespace ?? null);
|
|
169
|
+
return resolver.getTableName(logicalName);
|
|
160
170
|
}
|
|
161
171
|
}
|
|
162
172
|
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export {
|
|
2
|
+
SqlAdapter,
|
|
3
|
+
type SqlAdapterOptions,
|
|
4
|
+
type UnitOfWorkConfig,
|
|
5
|
+
type OutboxConfig,
|
|
6
|
+
sqliteProfiles,
|
|
7
|
+
sqliteStorageDefault,
|
|
8
|
+
sqliteStoragePrisma,
|
|
9
|
+
type SQLiteStorageMode,
|
|
10
|
+
} from "../generic-sql/generic-sql-adapter";
|
|
11
|
+
|
|
12
|
+
export type { SQLiteProfile } from "../adapters";
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import os from "node:os";
|
|
3
|
+
import path from "node:path";
|
|
1
4
|
import { describe, it, expect, vi, expectTypeOf } from "vitest";
|
|
2
5
|
import { defineFragment } from "@fragno-dev/core";
|
|
3
6
|
import {
|
|
@@ -8,9 +11,12 @@ import { withDatabase } from "./with-database";
|
|
|
8
11
|
import { schema, column, idColumn } from "./schema/create";
|
|
9
12
|
import type { SimpleQueryInterface } from "./query/simple-query-interface";
|
|
10
13
|
import type { DatabaseAdapter } from "./adapters/adapters";
|
|
14
|
+
import * as executeUnitOfWork from "./query/unit-of-work/execute-unit-of-work";
|
|
15
|
+
import { RequestContextStorage } from "@fragno-dev/core/internal/request-context-storage";
|
|
16
|
+
import { suffixNamingStrategy } from "./naming/sql-naming";
|
|
11
17
|
|
|
12
18
|
// Create a test schema
|
|
13
|
-
const testSchema = schema((s) => {
|
|
19
|
+
const testSchema = schema("test", (s) => {
|
|
14
20
|
return s.addTable("users", (t) => {
|
|
15
21
|
return t
|
|
16
22
|
.addColumn("id", idColumn())
|
|
@@ -28,13 +34,17 @@ function createMockAdapter(): DatabaseAdapter {
|
|
|
28
34
|
forSchema: vi.fn(),
|
|
29
35
|
executeRetrieve: vi.fn(),
|
|
30
36
|
executeMutations: vi.fn(),
|
|
37
|
+
registerSchema: vi.fn(),
|
|
38
|
+
reset: vi.fn(),
|
|
31
39
|
})),
|
|
32
40
|
} as unknown as SimpleQueryInterface<TestSchema>;
|
|
33
41
|
|
|
34
42
|
return {
|
|
35
43
|
createQueryEngine: vi.fn(() => mockdb),
|
|
36
|
-
|
|
44
|
+
getSchemaVersion: vi.fn(async () => undefined),
|
|
37
45
|
close: vi.fn(),
|
|
46
|
+
contextStorage: new RequestContextStorage(),
|
|
47
|
+
namingStrategy: suffixNamingStrategy,
|
|
38
48
|
} as unknown as DatabaseAdapter;
|
|
39
49
|
}
|
|
40
50
|
|
|
@@ -697,7 +707,7 @@ describe("DatabaseFragmentDefinitionBuilder", () => {
|
|
|
697
707
|
expect(storage.uow).toBeDefined();
|
|
698
708
|
});
|
|
699
709
|
|
|
700
|
-
it("should provide DatabaseServiceContext with
|
|
710
|
+
it("should provide DatabaseServiceContext with serviceTx and DatabaseHandlerContext with handlerTx", () => {
|
|
701
711
|
const mockAdapter = createMockAdapter();
|
|
702
712
|
|
|
703
713
|
const definition = withDatabase(testSchema)(defineFragment("db-frag")).build();
|
|
@@ -716,8 +726,8 @@ describe("DatabaseFragmentDefinitionBuilder", () => {
|
|
|
716
726
|
storage: mockStorage,
|
|
717
727
|
});
|
|
718
728
|
|
|
719
|
-
expect(typeof contexts.serviceContext.
|
|
720
|
-
expect(typeof contexts.handlerContext.
|
|
729
|
+
expect(typeof contexts.serviceContext.serviceTx).toBe("function");
|
|
730
|
+
expect(typeof contexts.handlerContext.handlerTx).toBe("function");
|
|
721
731
|
});
|
|
722
732
|
});
|
|
723
733
|
|
|
@@ -734,10 +744,7 @@ describe("DatabaseFragmentDefinitionBuilder", () => {
|
|
|
734
744
|
|
|
735
745
|
const mockAdapter = createMockAdapter();
|
|
736
746
|
|
|
737
|
-
const definition = withDatabase(
|
|
738
|
-
testSchema,
|
|
739
|
-
"my-namespace",
|
|
740
|
-
)(defineFragment<Config>("complex-db-frag"))
|
|
747
|
+
const definition = withDatabase(testSchema)(defineFragment<Config>("complex-db-frag"))
|
|
741
748
|
.withDependencies(({ config }) => ({
|
|
742
749
|
connectionString: config.dbConnectionString,
|
|
743
750
|
debug: config.debug,
|
|
@@ -805,17 +812,29 @@ describe("DatabaseFragmentDefinitionBuilder", () => {
|
|
|
805
812
|
});
|
|
806
813
|
});
|
|
807
814
|
|
|
808
|
-
describe("
|
|
809
|
-
it("should
|
|
815
|
+
describe("default adapter", () => {
|
|
816
|
+
it("should default to sqlite adapter when database adapter is missing", () => {
|
|
817
|
+
const previous = process.env["FRAGNO_DATA_DIR"];
|
|
818
|
+
const dataDir = fs.mkdtempSync(path.join(os.tmpdir(), "fragno-db-default-"));
|
|
819
|
+
process.env["FRAGNO_DATA_DIR"] = dataDir;
|
|
820
|
+
|
|
810
821
|
const definition = withDatabase(testSchema)(defineFragment("db-frag")).build();
|
|
811
822
|
|
|
812
|
-
|
|
813
|
-
definition.dependencies!({
|
|
823
|
+
try {
|
|
824
|
+
const deps = definition.dependencies!({
|
|
814
825
|
config: {},
|
|
815
|
-
// @ts-expect-error No databaseAdapter - intentionally invalid for runtime error test
|
|
816
826
|
options: {},
|
|
817
827
|
});
|
|
818
|
-
|
|
828
|
+
|
|
829
|
+
expect(deps.db).toBeDefined();
|
|
830
|
+
expect(deps.createUnitOfWork).toBeDefined();
|
|
831
|
+
} finally {
|
|
832
|
+
if (previous === undefined) {
|
|
833
|
+
delete process.env["FRAGNO_DATA_DIR"];
|
|
834
|
+
} else {
|
|
835
|
+
process.env["FRAGNO_DATA_DIR"] = previous;
|
|
836
|
+
}
|
|
837
|
+
}
|
|
819
838
|
});
|
|
820
839
|
});
|
|
821
840
|
|
|
@@ -845,43 +864,58 @@ describe("DatabaseFragmentDefinitionBuilder", () => {
|
|
|
845
864
|
});
|
|
846
865
|
});
|
|
847
866
|
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
867
|
+
describe("serviceTx hooks propagation", () => {
|
|
868
|
+
it("should pass hooks to createServiceTxBuilder", () => {
|
|
869
|
+
const mockAdapter = createMockAdapter();
|
|
870
|
+
|
|
871
|
+
// Define hooks type
|
|
872
|
+
type TestHooks = {
|
|
873
|
+
onUserCreated: (payload: { email: string }) => void;
|
|
874
|
+
};
|
|
875
|
+
|
|
876
|
+
// Create a fragment with hooks
|
|
877
|
+
const definition = withDatabase(testSchema)(defineFragment("db-frag-with-hooks"))
|
|
878
|
+
.provideHooks<TestHooks>(({ defineHook }) => ({
|
|
879
|
+
onUserCreated: defineHook(function (payload: { email: string }) {
|
|
880
|
+
// Hook implementation
|
|
881
|
+
console.log("User created:", payload.email);
|
|
882
|
+
}),
|
|
883
|
+
}))
|
|
884
|
+
.build();
|
|
885
|
+
|
|
886
|
+
// Create a mock storage
|
|
887
|
+
const mockStorage = {
|
|
888
|
+
getStore: () => ({
|
|
889
|
+
uow: mockAdapter.createQueryEngine(testSchema, "test").createUnitOfWork(),
|
|
890
|
+
}),
|
|
891
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
892
|
+
} as any;
|
|
893
|
+
|
|
894
|
+
// Spy on createServiceTxBuilder
|
|
895
|
+
const createServiceTxBuilderSpy = vi.spyOn(executeUnitOfWork, "createServiceTxBuilder");
|
|
896
|
+
|
|
897
|
+
// Get the contexts which includes serviceTx
|
|
898
|
+
const contexts = definition.createThisContext!({
|
|
899
|
+
config: {},
|
|
900
|
+
options: { databaseAdapter: mockAdapter },
|
|
901
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
902
|
+
deps: {} as any,
|
|
903
|
+
storage: mockStorage,
|
|
904
|
+
});
|
|
905
|
+
|
|
906
|
+
// Call serviceTx - this should pass hooks to createServiceTxBuilder
|
|
907
|
+
contexts.serviceContext.serviceTx(testSchema);
|
|
908
|
+
|
|
909
|
+
// Verify createServiceTxBuilder was called with 3 arguments (schema, uow, hooks)
|
|
910
|
+
expect(createServiceTxBuilderSpy).toHaveBeenCalledOnce();
|
|
911
|
+
const callArgs = createServiceTxBuilderSpy.mock.calls[0];
|
|
912
|
+
expect(callArgs).toHaveLength(3);
|
|
913
|
+
expect(callArgs[0]).toBe(testSchema); // schema
|
|
914
|
+
expect(callArgs[1]).toBeDefined(); // uow
|
|
915
|
+
expect(callArgs[2]).toBeDefined(); // hooks - this is what we're testing
|
|
916
|
+
expect(callArgs[2]).toHaveProperty("onUserCreated");
|
|
917
|
+
|
|
918
|
+
createServiceTxBuilderSpy.mockRestore();
|
|
919
|
+
});
|
|
920
|
+
});
|
|
887
921
|
});
|