@fragno-dev/db 0.2.2 → 0.4.1
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 +404 -175
- package/CHANGELOG.md +109 -0
- package/README.md +54 -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 +24 -9
- package/dist/adapters/generic-sql/generic-sql-adapter.d.ts.map +1 -1
- package/dist/adapters/generic-sql/generic-sql-adapter.js +60 -22
- package/dist/adapters/generic-sql/generic-sql-adapter.js.map +1 -1
- package/dist/adapters/generic-sql/generic-sql-uow-executor.js +169 -3
- package/dist/adapters/generic-sql/generic-sql-uow-executor.js.map +1 -1
- package/dist/adapters/generic-sql/migration/cold-kysely.js.map +1 -1
- package/dist/adapters/generic-sql/migration/dialect/mysql.js +25 -6
- package/dist/adapters/generic-sql/migration/dialect/mysql.js.map +1 -1
- package/dist/adapters/generic-sql/migration/dialect/postgres.js +7 -6
- package/dist/adapters/generic-sql/migration/dialect/postgres.js.map +1 -1
- package/dist/adapters/generic-sql/migration/dialect/sqlite.js +193 -16
- package/dist/adapters/generic-sql/migration/dialect/sqlite.js.map +1 -1
- package/dist/adapters/generic-sql/migration/executor.d.ts.map +1 -1
- package/dist/adapters/generic-sql/migration/executor.js +30 -3
- package/dist/adapters/generic-sql/migration/executor.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 +9 -9
- package/dist/adapters/generic-sql/migration/prepared-migrations.js.map +1 -1
- package/dist/adapters/generic-sql/migration/sql-generator.js +75 -52
- package/dist/adapters/generic-sql/migration/sql-generator.js.map +1 -1
- package/dist/adapters/generic-sql/query/create-sql-query-compiler.js +7 -6
- 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/db-now-sql.js +27 -0
- package/dist/adapters/generic-sql/query/db-now-sql.js.map +1 -0
- package/dist/adapters/generic-sql/query/generic-sql-uow-operation-compiler.js +32 -21
- 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 +49 -18
- package/dist/adapters/generic-sql/query/sql-query-compiler.js.map +1 -1
- package/dist/adapters/generic-sql/query/where-builder.js +43 -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 +6 -2
- package/dist/adapters/generic-sql/uow-decoder.js.map +1 -1
- package/dist/adapters/generic-sql/uow-encoder.js +27 -8
- package/dist/adapters/generic-sql/uow-encoder.js.map +1 -1
- package/dist/adapters/in-memory/condition-evaluator.js +135 -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 +196 -0
- package/dist/adapters/in-memory/in-memory-adapter.js.map +1 -0
- package/dist/adapters/in-memory/in-memory-uow.js +871 -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 +30 -0
- package/dist/adapters/in-memory/options.d.ts.map +1 -0
- package/dist/adapters/in-memory/options.js +62 -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 +51 -24
- 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/browser/adapters/adapters.d.ts +61 -0
- package/dist/browser/adapters/adapters.d.ts.map +1 -0
- package/dist/browser/adapters/generic-sql/migration/executor.d.ts +15 -0
- package/dist/browser/adapters/generic-sql/migration/executor.d.ts.map +1 -0
- package/dist/browser/adapters/generic-sql/migration/prepared-migrations.d.ts +66 -0
- package/dist/browser/adapters/generic-sql/migration/prepared-migrations.d.ts.map +1 -0
- package/dist/browser/adapters/generic-sql/sqlite-storage.d.ts +11 -0
- package/dist/browser/adapters/generic-sql/sqlite-storage.d.ts.map +1 -0
- package/dist/browser/adapters/in-memory/in-memory-adapter.d.ts +5 -0
- package/dist/browser/adapters/in-memory/index.d.ts +2 -0
- package/dist/browser/adapters/in-memory/options.d.ts +1 -0
- package/dist/browser/db-fragment-definition-builder.d.ts +237 -0
- package/dist/browser/db-fragment-definition-builder.d.ts.map +1 -0
- package/dist/browser/durable-hooks.d.ts +3 -0
- package/dist/browser/fragments/internal-fragment.d.ts +317 -0
- package/dist/browser/fragments/internal-fragment.d.ts.map +1 -0
- package/dist/browser/fragments/internal-fragment.schema.d.ts +1 -0
- package/dist/browser/hooks/durable-hooks-logger.d.ts +10 -0
- package/dist/browser/hooks/durable-hooks-logger.d.ts.map +1 -0
- package/dist/browser/hooks/hooks.d.ts +146 -0
- package/dist/browser/hooks/hooks.d.ts.map +1 -0
- package/dist/browser/id.js +1 -0
- package/dist/browser/internal/adapter-registry.d.ts +4 -0
- package/dist/browser/internal/outbox-state.d.ts +2 -0
- package/dist/browser/mod.d.ts +15 -0
- package/dist/browser/mod.d.ts.map +1 -0
- package/dist/browser/mod.js +17 -0
- package/dist/browser/mod.js.map +1 -0
- package/dist/browser/mod2.d.ts +48 -0
- package/dist/browser/mod2.d.ts.map +1 -0
- package/dist/browser/naming/sql-naming.d.ts +19 -0
- package/dist/browser/naming/sql-naming.d.ts.map +1 -0
- package/dist/browser/outbox/outbox.d.ts +21 -0
- package/dist/browser/outbox/outbox.d.ts.map +1 -0
- package/dist/browser/query/column-defaults.js +1 -0
- package/dist/browser/query/condition-builder.d.ts +44 -0
- package/dist/browser/query/condition-builder.d.ts.map +1 -0
- package/dist/browser/query/condition-builder.js +97 -0
- package/dist/browser/query/condition-builder.js.map +1 -0
- package/dist/browser/query/cursor.d.ts +105 -0
- package/dist/browser/query/cursor.d.ts.map +1 -0
- package/dist/browser/query/cursor.js +150 -0
- package/dist/browser/query/cursor.js.map +1 -0
- package/dist/browser/query/db-now.d.ts +22 -0
- package/dist/browser/query/db-now.d.ts.map +1 -0
- package/dist/browser/query/db-now.js +33 -0
- package/dist/browser/query/db-now.js.map +1 -0
- package/dist/browser/query/orm/orm.d.ts +18 -0
- package/dist/browser/query/orm/orm.d.ts.map +1 -0
- package/dist/browser/query/simple-query-interface.d.ts +108 -0
- package/dist/browser/query/simple-query-interface.d.ts.map +1 -0
- package/dist/browser/query/unit-of-work/execute-unit-of-work.d.ts +423 -0
- package/dist/browser/query/unit-of-work/execute-unit-of-work.d.ts.map +1 -0
- package/dist/browser/query/unit-of-work/execute-unit-of-work.js +507 -0
- package/dist/browser/query/unit-of-work/execute-unit-of-work.js.map +1 -0
- package/dist/browser/query/unit-of-work/retry-policy.d.ts +23 -0
- package/dist/browser/query/unit-of-work/retry-policy.d.ts.map +1 -0
- package/dist/browser/query/unit-of-work/retry-policy.js +40 -0
- package/dist/browser/query/unit-of-work/retry-policy.js.map +1 -0
- package/dist/browser/query/unit-of-work/unit-of-work.d.ts +703 -0
- package/dist/browser/query/unit-of-work/unit-of-work.d.ts.map +1 -0
- package/dist/browser/query/unit-of-work/unit-of-work.js +1206 -0
- package/dist/browser/query/unit-of-work/unit-of-work.js.map +1 -0
- package/dist/browser/query/value-encoding.js +38 -0
- package/dist/browser/query/value-encoding.js.map +1 -0
- package/dist/browser/schema/create.d.ts +326 -0
- package/dist/browser/schema/create.d.ts.map +1 -0
- package/dist/browser/schema/create.js +89 -0
- package/dist/browser/schema/create.js.map +1 -0
- package/dist/browser/schema/generate-id.js +28 -0
- package/dist/browser/schema/generate-id.js.map +1 -0
- package/dist/browser/shared/providers.d.ts +6 -0
- package/dist/browser/shared/providers.d.ts.map +1 -0
- package/dist/browser/sql-driver/connection/connection-provider.d.ts +13 -0
- package/dist/browser/sql-driver/connection/connection-provider.d.ts.map +1 -0
- package/dist/browser/sql-driver/dialect-adapter/dialect-adapter.d.ts +7 -0
- package/dist/browser/sql-driver/dialect-adapter/dialect-adapter.d.ts.map +1 -0
- package/dist/browser/sql-driver/driver/runtime-driver.d.ts +23 -0
- package/dist/browser/sql-driver/driver/runtime-driver.d.ts.map +1 -0
- package/dist/browser/sql-driver/query-executor/plugin.d.ts +17 -0
- package/dist/browser/sql-driver/query-executor/plugin.d.ts.map +1 -0
- package/dist/browser/sql-driver/query-executor/query-executor.d.ts +36 -0
- package/dist/browser/sql-driver/query-executor/query-executor.d.ts.map +1 -0
- package/dist/browser/sql-driver/sql-driver-adapter.d.ts +29 -0
- package/dist/browser/sql-driver/sql-driver-adapter.d.ts.map +1 -0
- package/dist/browser/sql-driver/sql-driver.d.ts +38 -0
- package/dist/browser/sql-driver/sql-driver.d.ts.map +1 -0
- package/dist/browser/sync/commands.d.ts +15 -0
- package/dist/browser/sync/commands.d.ts.map +1 -0
- package/dist/browser/sync/commands.js +27 -0
- package/dist/browser/sync/commands.js.map +1 -0
- package/dist/browser/sync/types.d.ts +63 -0
- package/dist/browser/sync/types.d.ts.map +1 -0
- package/dist/browser/util/types.d.ts +8 -0
- package/dist/browser/util/types.d.ts.map +1 -0
- package/dist/browser/with-database.d.ts +29 -0
- package/dist/browser/with-database.d.ts.map +1 -0
- package/dist/client.d.ts +4 -0
- package/dist/client.js +5 -0
- package/dist/db-fragment-definition-builder.d.ts +101 -33
- package/dist/db-fragment-definition-builder.d.ts.map +1 -1
- package/dist/db-fragment-definition-builder.js +450 -60
- package/dist/db-fragment-definition-builder.js.map +1 -1
- package/dist/dispatchers/cloudflare-do/dispatcher.d.ts +20 -0
- package/dist/dispatchers/cloudflare-do/dispatcher.d.ts.map +1 -0
- package/dist/dispatchers/cloudflare-do/dispatcher.js +147 -0
- package/dist/dispatchers/cloudflare-do/dispatcher.js.map +1 -0
- package/dist/dispatchers/cloudflare-do/index.d.ts +11 -0
- package/dist/dispatchers/cloudflare-do/index.d.ts.map +1 -0
- package/dist/dispatchers/cloudflare-do/index.js +31 -0
- package/dist/dispatchers/cloudflare-do/index.js.map +1 -0
- package/dist/dispatchers/node/dispatcher.d.ts +14 -0
- package/dist/dispatchers/node/dispatcher.d.ts.map +1 -0
- package/dist/dispatchers/node/dispatcher.js +80 -0
- package/dist/dispatchers/node/dispatcher.js.map +1 -0
- package/dist/dispatchers/node/index.d.ts +12 -0
- package/dist/dispatchers/node/index.d.ts.map +1 -0
- package/dist/dispatchers/node/index.js +27 -0
- package/dist/dispatchers/node/index.js.map +1 -0
- package/dist/durable-hooks.d.ts +31 -0
- package/dist/durable-hooks.d.ts.map +1 -0
- package/dist/durable-hooks.js +23 -0
- package/dist/durable-hooks.js.map +1 -0
- package/dist/fragments/internal-fragment.d.ts +186 -8
- package/dist/fragments/internal-fragment.d.ts.map +1 -1
- package/dist/fragments/internal-fragment.js +203 -38
- package/dist/fragments/internal-fragment.js.map +1 -1
- package/dist/fragments/internal-fragment.routes.js +164 -0
- package/dist/fragments/internal-fragment.routes.js.map +1 -0
- package/dist/fragments/internal-fragment.schema.d.ts +15 -0
- package/dist/fragments/internal-fragment.schema.d.ts.map +1 -0
- package/dist/fragments/internal-fragment.schema.js +39 -0
- package/dist/fragments/internal-fragment.schema.js.map +1 -0
- package/dist/hooks/durable-hooks-logger.d.ts +10 -0
- package/dist/hooks/durable-hooks-logger.d.ts.map +1 -0
- package/dist/hooks/durable-hooks-logger.js +75 -0
- package/dist/hooks/durable-hooks-logger.js.map +1 -0
- package/dist/hooks/durable-hooks-processor.d.ts +1 -0
- package/dist/hooks/durable-hooks-processor.js +80 -0
- package/dist/hooks/durable-hooks-processor.js.map +1 -0
- package/dist/hooks/durable-hooks-runtime.js +44 -0
- package/dist/hooks/durable-hooks-runtime.js.map +1 -0
- package/dist/hooks/hooks.d.ts +100 -1
- package/dist/hooks/hooks.d.ts.map +1 -1
- package/dist/hooks/hooks.js +254 -27
- package/dist/hooks/hooks.js.map +1 -1
- package/dist/id.d.ts +2 -2
- package/dist/id.js +2 -2
- package/dist/internal/adapter-registry.d.ts +11 -0
- package/dist/internal/adapter-registry.d.ts.map +1 -0
- package/dist/internal/adapter-registry.js +135 -0
- package/dist/internal/adapter-registry.js.map +1 -0
- package/dist/internal/outbox-state.d.ts +2 -0
- package/dist/internal/outbox-state.js +26 -0
- package/dist/internal/outbox-state.js.map +1 -0
- package/dist/migration-engine/auto-from-schema.d.ts +33 -0
- package/dist/migration-engine/auto-from-schema.d.ts.map +1 -0
- package/dist/migration-engine/auto-from-schema.js +223 -37
- 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 +86 -35
- package/dist/migration-engine/generation-engine.js.map +1 -1
- package/dist/migration-engine/shared.d.ts +113 -0
- package/dist/migration-engine/shared.d.ts.map +1 -0
- package/dist/migration-engine/shared.js.map +1 -1
- package/dist/mod.d.ts +20 -12
- package/dist/mod.d.ts.map +1 -1
- package/dist/mod.js +18 -12
- 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/outbox/outbox-builder.js +156 -0
- package/dist/outbox/outbox-builder.js.map +1 -0
- package/dist/outbox/outbox.d.ts +54 -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/query/column-defaults.js +20 -4
- package/dist/query/column-defaults.js.map +1 -1
- package/dist/query/condition-builder.d.ts +7 -1
- package/dist/query/condition-builder.d.ts.map +1 -1
- package/dist/query/condition-builder.js +5 -1
- package/dist/query/condition-builder.js.map +1 -1
- package/dist/query/cursor-client.d.ts +105 -0
- package/dist/query/cursor-client.d.ts.map +1 -0
- package/dist/query/cursor-client.js +165 -0
- package/dist/query/cursor-client.js.map +1 -0
- package/dist/query/cursor.d.ts +3 -1
- package/dist/query/cursor.d.ts.map +1 -1
- package/dist/query/cursor.js +51 -14
- package/dist/query/cursor.js.map +1 -1
- package/dist/query/db-now.d.ts +22 -0
- package/dist/query/db-now.d.ts.map +1 -0
- package/dist/query/db-now.js +35 -0
- package/dist/query/db-now.js.map +1 -0
- package/dist/query/orm/orm.js.map +1 -1
- package/dist/query/serialize/create-sql-serializer.js +5 -4
- 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 +60 -12
- 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 +13 -4
- package/dist/query/simple-query-interface.d.ts.map +1 -1
- package/dist/query/unit-of-work/execute-unit-of-work.d.ts +37 -2
- 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 +50 -24
- 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 +92 -30
- package/dist/query/unit-of-work/unit-of-work.d.ts.map +1 -1
- package/dist/query/unit-of-work/unit-of-work.js +136 -11
- package/dist/query/unit-of-work/unit-of-work.js.map +1 -1
- package/dist/query/value-decoding.js +16 -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 +103 -35
- package/dist/schema/create.d.ts.map +1 -1
- package/dist/schema/create.js +172 -58
- 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 +4 -3
- 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} +88 -60
- 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 +307 -0
- package/dist/schema-output/prisma.js.map +1 -0
- package/dist/sql-driver/dialects/durable-object-dialect.js +3 -9
- package/dist/sql-driver/dialects/durable-object-dialect.js.map +1 -1
- package/dist/sql-driver/query-executor/default-query-executor.js.map +1 -1
- package/dist/sql-driver/query-executor/query-executor-base.js.map +1 -1
- package/dist/sql-driver/sql-driver-adapter.js.map +1 -1
- package/dist/sql-driver/sql.js.map +1 -1
- package/dist/sync/commands.d.ts +15 -0
- package/dist/sync/commands.d.ts.map +1 -0
- package/dist/sync/commands.js +27 -0
- package/dist/sync/commands.js.map +1 -0
- package/dist/sync/index.d.ts +4 -0
- package/dist/sync/index.js +4 -0
- package/dist/sync/read-tracking.d.ts +25 -0
- package/dist/sync/read-tracking.d.ts.map +1 -0
- package/dist/sync/read-tracking.js +148 -0
- package/dist/sync/read-tracking.js.map +1 -0
- package/dist/sync/submit.js +213 -0
- package/dist/sync/submit.js.map +1 -0
- package/dist/sync/types.d.ts +63 -0
- package/dist/sync/types.d.ts.map +1 -0
- package/dist/util/default-database-adapter.js +66 -0
- package/dist/util/default-database-adapter.js.map +1 -0
- package/dist/with-database.d.ts +3 -6
- package/dist/with-database.d.ts.map +1 -1
- package/dist/with-database.js +8 -7
- package/dist/with-database.js.map +1 -1
- package/package.json +62 -55
- package/src/adapters/adapters.ts +33 -26
- package/src/adapters/drizzle/migrate-drizzle.test.ts +99 -41
- package/src/adapters/drizzle/migration-parity-drizzle-kit.test.ts +601 -0
- package/src/adapters/drizzle/test-utils.ts +13 -8
- package/src/adapters/generic-sql/driver-config.ts +38 -0
- package/src/adapters/generic-sql/generic-sql-adapter.test.ts +10 -8
- package/src/adapters/generic-sql/generic-sql-adapter.ts +117 -34
- package/src/adapters/generic-sql/generic-sql-uow-executor.test.ts +55 -0
- package/src/adapters/generic-sql/generic-sql-uow-executor.ts +297 -3
- package/src/adapters/generic-sql/migration/adapter-migration-parity.test.ts +120 -0
- package/src/adapters/generic-sql/migration/cold-kysely.ts +1 -0
- package/src/adapters/generic-sql/migration/dialect/mysql.test.ts +27 -8
- package/src/adapters/generic-sql/migration/dialect/mysql.ts +47 -8
- package/src/adapters/generic-sql/migration/dialect/postgres.test.ts +28 -9
- package/src/adapters/generic-sql/migration/dialect/postgres.ts +9 -4
- package/src/adapters/generic-sql/migration/dialect/sqlite.test.ts +839 -8
- package/src/adapters/generic-sql/migration/dialect/sqlite.ts +396 -53
- package/src/adapters/generic-sql/migration/executor.test.ts +52 -0
- package/src/adapters/generic-sql/migration/executor.ts +47 -4
- package/src/adapters/generic-sql/migration/prepared-migrations.test.ts +238 -46
- package/src/adapters/generic-sql/migration/prepared-migrations.ts +21 -13
- package/src/adapters/generic-sql/migration/sql-generator.ts +145 -66
- package/src/adapters/generic-sql/query/create-sql-query-compiler.ts +11 -8
- package/src/adapters/generic-sql/query/cursor-utils.test.ts +272 -0
- package/src/adapters/generic-sql/query/cursor-utils.ts +42 -7
- package/src/adapters/generic-sql/query/db-now-sql.ts +49 -0
- package/src/adapters/generic-sql/query/generic-sql-uow-operation-compiler.test.ts +171 -35
- package/src/adapters/generic-sql/query/generic-sql-uow-operation-compiler.ts +53 -40
- package/src/adapters/generic-sql/query/select-builder.test.ts +16 -11
- package/src/adapters/generic-sql/query/select-builder.ts +7 -3
- package/src/adapters/generic-sql/query/sql-query-compiler.test.ts +75 -6
- package/src/adapters/generic-sql/query/sql-query-compiler.ts +129 -24
- package/src/adapters/generic-sql/query/where-builder.test.ts +96 -20
- package/src/adapters/generic-sql/query/where-builder.ts +112 -41
- package/src/adapters/{kysely/kysely-adapter-pglite.test.ts → generic-sql/sql-adapter-pglite-migrations.test.ts} +11 -20
- package/src/adapters/generic-sql/sql-adapter-pglite-pagination.test.ts +851 -0
- package/src/adapters/{drizzle/drizzle-adapter-pglite.test.ts → generic-sql/sql-adapter-pglite-queries.test.ts} +18 -15
- package/src/adapters/generic-sql/{test/generic-drizzle-adapter-sqlite3.test.ts → sql-adapter-sqlite3-driver.test.ts} +282 -14
- package/src/adapters/{drizzle/drizzle-adapter-sqlite3.test.ts → generic-sql/sql-adapter-sqlite3-uow.test.ts} +129 -12
- package/src/adapters/{kysely/kysely-adapter-sqlocal.test.ts → generic-sql/sql-adapter-sqlocal.test.ts} +9 -7
- package/src/adapters/generic-sql/sqlite-storage.ts +20 -0
- package/src/adapters/generic-sql/uow-decoder.test.ts +5 -4
- package/src/adapters/generic-sql/uow-decoder.ts +23 -5
- package/src/adapters/generic-sql/uow-encoder.test.ts +36 -3
- package/src/adapters/generic-sql/uow-encoder.ts +48 -13
- package/src/adapters/in-memory/condition-evaluator.test.ts +194 -0
- package/src/adapters/in-memory/condition-evaluator.ts +280 -0
- package/src/adapters/in-memory/errors.ts +20 -0
- package/src/adapters/in-memory/in-memory-adapter.ts +388 -0
- package/src/adapters/in-memory/in-memory-uow.mutations.test.ts +344 -0
- package/src/adapters/in-memory/in-memory-uow.retrieval.test.ts +255 -0
- package/src/adapters/in-memory/in-memory-uow.ts +1724 -0
- package/src/adapters/in-memory/index.ts +3 -0
- package/src/adapters/in-memory/options.test.ts +42 -0
- package/src/adapters/in-memory/options.ts +91 -0
- package/src/adapters/in-memory/outbox.test.ts +361 -0
- package/src/adapters/in-memory/reference-resolution.test.ts +51 -0
- package/src/adapters/in-memory/reference-resolution.ts +67 -0
- package/src/adapters/in-memory/sorted-array-index.test.ts +124 -0
- package/src/adapters/in-memory/sorted-array-index.ts +228 -0
- package/src/adapters/in-memory/store.test.ts +69 -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 +58 -0
- package/src/adapters/prisma/prisma-adapter-sqlite3.test.ts +1207 -0
- package/src/adapters/shared/from-unit-of-work-compiler.ts +159 -47
- package/src/adapters/shared/uow-operation-compiler.ts +28 -18
- package/src/adapters/sql/index.ts +12 -0
- package/src/browser/mod.ts +64 -0
- package/src/client.ts +19 -0
- package/src/db-fragment-definition-builder.test.ts +845 -53
- package/src/db-fragment-definition-builder.ts +911 -95
- package/src/db-fragment-instantiator.test.ts +210 -94
- package/src/db-fragment-integration.test.ts +17 -12
- package/src/dispatchers/cloudflare-do/dispatcher.ts +204 -0
- package/src/dispatchers/cloudflare-do/index.test.ts +206 -0
- package/src/dispatchers/cloudflare-do/index.ts +63 -0
- package/src/dispatchers/node/dispatcher.ts +112 -0
- package/src/dispatchers/node/index.test.ts +120 -0
- package/src/dispatchers/node/index.ts +50 -0
- package/src/durable-hooks.test.ts +80 -0
- package/src/durable-hooks.ts +67 -0
- package/src/fragments/internal-fragment.routes.test.ts +570 -0
- package/src/fragments/internal-fragment.routes.ts +334 -0
- package/src/fragments/internal-fragment.schema.ts +95 -0
- package/src/fragments/internal-fragment.test.ts +505 -83
- package/src/fragments/internal-fragment.ts +453 -70
- package/src/hooks/durable-hooks-logger.ts +126 -0
- package/src/hooks/durable-hooks-processor.pglite.test.ts +87 -0
- package/src/hooks/durable-hooks-processor.test.ts +282 -0
- package/src/hooks/durable-hooks-processor.ts +173 -0
- package/src/hooks/durable-hooks-runtime.test.ts +65 -0
- package/src/hooks/durable-hooks-runtime.ts +81 -0
- package/src/hooks/hooks.test.ts +455 -34
- package/src/hooks/hooks.ts +501 -34
- package/src/id.test.ts +34 -0
- package/src/id.ts +1 -3
- package/src/internal/adapter-registry.test.ts +93 -0
- package/src/internal/adapter-registry.ts +239 -0
- package/src/internal/outbox-state.ts +43 -0
- package/src/migration-engine/auto-from-schema.test.ts +107 -14
- package/src/migration-engine/auto-from-schema.ts +365 -44
- package/src/migration-engine/create.test.ts +4 -3
- package/src/migration-engine/create.ts +1 -1
- package/src/migration-engine/generation-engine.test.ts +292 -110
- package/src/migration-engine/generation-engine.ts +117 -66
- package/src/migration-engine/shared.ts +14 -0
- package/src/mod.ts +95 -39
- package/src/naming/sql-naming.ts +181 -0
- package/src/outbox/outbox-builder.ts +241 -0
- package/src/outbox/outbox.test.ts +424 -0
- package/src/outbox/outbox.ts +139 -0
- package/src/query/column-defaults.ts +42 -4
- package/src/query/condition-builder.test.ts +18 -3
- package/src/query/condition-builder.ts +7 -0
- package/src/query/cursor-client.test.ts +70 -0
- package/src/query/cursor-client.ts +263 -0
- package/src/query/cursor.test.ts +119 -20
- package/src/query/cursor.ts +88 -27
- package/src/query/db-now.ts +73 -0
- package/src/query/orm/orm.ts +2 -2
- package/src/query/query-type.test.ts +4 -3
- package/src/query/serialize/create-sql-serializer.ts +10 -5
- package/src/query/serialize/dialect/mysql-serializer.ts +13 -5
- package/src/query/serialize/dialect/postgres-serializer.ts +35 -5
- package/src/query/serialize/dialect/sqlite-serializer.test.ts +90 -3
- package/src/query/serialize/dialect/sqlite-serializer.ts +108 -12
- package/src/query/serialize/sql-serializer.ts +4 -4
- package/src/query/simple-query-interface.ts +15 -4
- package/src/query/unit-of-work/execute-unit-of-work.test.ts +372 -10
- package/src/query/unit-of-work/execute-unit-of-work.ts +87 -27
- package/src/query/unit-of-work/retry-policy.test.ts +1 -0
- package/src/query/unit-of-work/tx-builder.test.ts +73 -1
- package/src/query/unit-of-work/unit-of-work-coordinator.test.ts +17 -16
- package/src/query/unit-of-work/unit-of-work-types.test.ts +42 -12
- package/src/query/unit-of-work/unit-of-work.test.ts +196 -39
- package/src/query/unit-of-work/unit-of-work.ts +309 -38
- package/src/query/value-decoding.test.ts +63 -4
- package/src/query/value-decoding.ts +32 -6
- package/src/query/value-encoding.test.ts +86 -2
- package/src/query/value-encoding.ts +56 -6
- package/src/schema/create.test.ts +293 -47
- package/src/schema/create.ts +406 -70
- package/src/schema/generate-id.test.ts +3 -2
- package/src/schema/generate-id.ts +2 -2
- package/src/schema/serialize.test.ts +18 -5
- package/src/schema/type-conversion/create-sql-type-mapper.ts +8 -3
- package/src/schema/type-conversion/dialect/sqlite.ts +18 -0
- package/src/schema/type-conversion/type-mapping.test.ts +26 -1
- package/src/schema/validator.test.ts +199 -0
- package/src/schema/validator.ts +232 -0
- package/src/{adapters/drizzle/generate.test.ts → schema-output/drizzle.test.ts} +232 -129
- package/src/{adapters/drizzle/generate.ts → schema-output/drizzle.ts} +155 -99
- package/src/schema-output/prisma.test.ts +694 -0
- package/src/schema-output/prisma.ts +593 -0
- package/src/sql-driver/better-sqlite3.test.ts +5 -3
- package/src/sql-driver/dialects/durable-object-dialect.ts +3 -8
- package/src/sql-driver/query-executor/default-query-executor.ts +1 -1
- package/src/sql-driver/query-executor/query-executor-base.ts +1 -1
- package/src/sql-driver/query-executor/query-executor.ts +1 -1
- package/src/sql-driver/sql-driver-adapter.ts +2 -2
- package/src/sql-driver/sql.ts +2 -1
- package/src/sql-driver/sqlocal.test.ts +4 -2
- package/src/sync/commands.test.ts +39 -0
- package/src/sync/commands.ts +51 -0
- package/src/sync/conflict-checker.test.ts +450 -0
- package/src/sync/conflict-checker.ts +248 -0
- package/src/sync/index.ts +14 -0
- package/src/sync/plan.ts +9 -0
- package/src/sync/read-tracking.test.ts +177 -0
- package/src/sync/read-tracking.ts +287 -0
- package/src/sync/submit.test.ts +205 -0
- package/src/sync/submit.ts +328 -0
- package/src/sync/types.ts +80 -0
- package/src/util/default-database-adapter.ts +119 -0
- package/src/with-database.ts +20 -31
- package/tsconfig.json +1 -1
- package/tsdown.config.ts +38 -24
- package/vitest.config.ts +1 -0
- 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 +0 -165
- package/dist/node_modules/.pnpm/rou3@0.7.10/node_modules/rou3/dist/index.js.map +0 -1
- package/dist/packages/fragno/dist/api/bind-services.js +0 -20
- package/dist/packages/fragno/dist/api/bind-services.js.map +0 -1
- package/dist/packages/fragno/dist/api/error.js +0 -48
- package/dist/packages/fragno/dist/api/error.js.map +0 -1
- package/dist/packages/fragno/dist/api/fragment-definition-builder.js +0 -320
- package/dist/packages/fragno/dist/api/fragment-definition-builder.js.map +0 -1
- package/dist/packages/fragno/dist/api/fragment-instantiator.js +0 -525
- package/dist/packages/fragno/dist/api/fragment-instantiator.js.map +0 -1
- package/dist/packages/fragno/dist/api/fragno-response.js +0 -73
- package/dist/packages/fragno/dist/api/fragno-response.js.map +0 -1
- package/dist/packages/fragno/dist/api/internal/response-stream.js +0 -81
- package/dist/packages/fragno/dist/api/internal/response-stream.js.map +0 -1
- package/dist/packages/fragno/dist/api/internal/route.js +0 -10
- package/dist/packages/fragno/dist/api/internal/route.js.map +0 -1
- package/dist/packages/fragno/dist/api/mutable-request-state.js +0 -97
- package/dist/packages/fragno/dist/api/mutable-request-state.js.map +0 -1
- package/dist/packages/fragno/dist/api/request-context-storage.js +0 -43
- package/dist/packages/fragno/dist/api/request-context-storage.js.map +0 -1
- package/dist/packages/fragno/dist/api/request-input-context.js +0 -118
- package/dist/packages/fragno/dist/api/request-input-context.js.map +0 -1
- package/dist/packages/fragno/dist/api/request-middleware.js +0 -83
- package/dist/packages/fragno/dist/api/request-middleware.js.map +0 -1
- package/dist/packages/fragno/dist/api/request-output-context.js +0 -119
- package/dist/packages/fragno/dist/api/request-output-context.js.map +0 -1
- package/dist/packages/fragno/dist/api/route.js +0 -17
- package/dist/packages/fragno/dist/api/route.js.map +0 -1
- package/dist/packages/fragno/dist/internal/symbols.js +0 -10
- package/dist/packages/fragno/dist/internal/symbols.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/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,114 @@
|
|
|
1
1
|
# @fragno-dev/db
|
|
2
2
|
|
|
3
|
+
## 0.4.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [0020e39]
|
|
8
|
+
- @fragno-dev/core@0.2.2
|
|
9
|
+
|
|
10
|
+
## 0.4.0
|
|
11
|
+
|
|
12
|
+
### Minor Changes
|
|
13
|
+
|
|
14
|
+
- 8a96998: feat: allow altering existing columns to become nullable
|
|
15
|
+
|
|
16
|
+
### Patch Changes
|
|
17
|
+
|
|
18
|
+
- 3e2ff94: feat: register schemas via adapter registry and mount internal routes
|
|
19
|
+
- f34d7d7: fix: ensure cross-schema durable hook enqueuing works reliably
|
|
20
|
+
- 4d141f8: fix: remove development exports from published packages
|
|
21
|
+
- c8841b5: feat: add callServices helper with implicit request context
|
|
22
|
+
- ae54a60: fix: add browser-safe db entry and rewrite sync command imports for browser builds
|
|
23
|
+
- 7dd7055: feat: remove deps.db and add db-time helpers on builders
|
|
24
|
+
- e178bf4: fix: treat missing left-joined relations as null/[]
|
|
25
|
+
- d2f68ba: feat: add db now offsets and interval helpers
|
|
26
|
+
- 75191db: fix: return fresh DO SQL connections per acquire
|
|
27
|
+
- d395ad2: fix: improve durable hook claiming and wake scheduling
|
|
28
|
+
- 75407f3: feat: add durable hook pagination and newest-first indexing
|
|
29
|
+
- bfdd4b1: fix: skip better-sqlite3 fallback in Cloudflare workers
|
|
30
|
+
- 3ffa711: fix: align dev browser exports to avoid server entry in clients
|
|
31
|
+
- c2c3229: fix: ignore join-only relations in in-memory FK enforcement
|
|
32
|
+
- e559425: feat: add serviceCalls helper to preserve tuple inference for service deps
|
|
33
|
+
- fc5c256: fix(fragno-db): decode bigint values from SQLite blob columns
|
|
34
|
+
- 93fa469: fix: replace cuid2 with a shared Web Crypto id generator
|
|
35
|
+
- 14e00b1: feat: expose hook event metadata in HookContext
|
|
36
|
+
- f33286c: feat: add join-only addReference foreignKey:false support
|
|
37
|
+
- 95cdf95: feat: add browser-safe client exports entrypoint
|
|
38
|
+
- eabdb9c: feat(db): add in-memory outbox support
|
|
39
|
+
- 9eeba53: feat: add internal fragment describe metadata and adapter identity
|
|
40
|
+
- 49a9f4f: feat: add internal outbox mutation log and sync request tables
|
|
41
|
+
- dcba383: fix: write outbox mutation log rows during commits
|
|
42
|
+
- c895c07: feat(db): add internal sync submit endpoint and idempotency
|
|
43
|
+
- ed4b4a0: fix: add workerd/worker export conditions for server entry resolution
|
|
44
|
+
- 1102ce0: fix: support multi-column cursor pagination for SQL adapters
|
|
45
|
+
- ad2ef56: feat: move outbox opt-in to fragment options
|
|
46
|
+
- 0f9b7ef: refactor: replace linked fragments with internal routes
|
|
47
|
+
- 6d043ea: feat: add durable hooks runtime and dispatcher helpers
|
|
48
|
+
- fe55a13: feat(db): add read tracking hooks and plan mode support
|
|
49
|
+
- 01fc2cb: fix: scope db roundtrip guard to route handlers and enable by default in tests
|
|
50
|
+
- 0176aa8: fix: coerce join-only left-side ids and join where aliases
|
|
51
|
+
- 00f2631: feat: allow triggerHook to accept explicit hook ids
|
|
52
|
+
- c13c1c1: fix: handle sqlite FK preprocessing when FK columns are added in alter-table
|
|
53
|
+
- 0a6c8da: fix: stabilize sqlite recreate-table migrations
|
|
54
|
+
- 7a40517: fix: stabilize schema output ordering by schema name
|
|
55
|
+
- 91a2ac0: feat: add WorkflowStepTx API for step-scoped mutations
|
|
56
|
+
- 7bda0b2: feat(db): add sync command registry, registration, and sync entrypoint
|
|
57
|
+
- c115600: feat: widen external ids to 128 chars
|
|
58
|
+
- Updated dependencies [3e2ff94]
|
|
59
|
+
- Updated dependencies [f34d7d7]
|
|
60
|
+
- Updated dependencies [4d141f8]
|
|
61
|
+
- Updated dependencies [c8841b5]
|
|
62
|
+
- Updated dependencies [83f6223]
|
|
63
|
+
- Updated dependencies [567c3b3]
|
|
64
|
+
- Updated dependencies [8a2da9d]
|
|
65
|
+
- Updated dependencies [93fa469]
|
|
66
|
+
- Updated dependencies [b3ad7eb]
|
|
67
|
+
- Updated dependencies [9eeba53]
|
|
68
|
+
- Updated dependencies [2ae432c]
|
|
69
|
+
- Updated dependencies [9f87189]
|
|
70
|
+
- Updated dependencies [0f9b7ef]
|
|
71
|
+
- Updated dependencies [f4aedad]
|
|
72
|
+
- Updated dependencies [f042c9d]
|
|
73
|
+
- Updated dependencies [7bda0b2]
|
|
74
|
+
- Updated dependencies [b84a3d0]
|
|
75
|
+
- @fragno-dev/core@0.2.1
|
|
76
|
+
|
|
77
|
+
## 0.3.0
|
|
78
|
+
|
|
79
|
+
### Minor Changes
|
|
80
|
+
|
|
81
|
+
- 8e9b6cd: feat(db,cli): add SqlAdapter and explicit schema output formats
|
|
82
|
+
|
|
83
|
+
BREAKING CHANGE: The database adapter API now requires SqlAdapter with explicit schema output
|
|
84
|
+
formats.
|
|
85
|
+
|
|
86
|
+
### Patch Changes
|
|
87
|
+
|
|
88
|
+
- dbbbf60: fix: ensure unit-of-work after-phase hooks run on errors
|
|
89
|
+
- 3e07799: fix: allow durable hook processing to bypass wrapper adapters and widen drain helpers
|
|
90
|
+
- 20a98f8: feat: expose internal outbox route under /\_internal when outbox is enabled
|
|
91
|
+
- 1902f30: fix(db): normalize postgres timestamp decoding for timezone-less values.
|
|
92
|
+
- 15e3263: feat(db): require schema names and support namespace-aware SQL naming
|
|
93
|
+
- 208cb8e: feat: add runtime validation for table inserts
|
|
94
|
+
- 33f671b: fix(db): add dbNow value support, cursor pagination, and retry conflict handling
|
|
95
|
+
- fc803fc: fix(db): ensure Drizzle SQLite external ids are enforced as unique indexes.
|
|
96
|
+
- 0628c1f: fix(db): requeue durable hooks stuck in processing after a timeout
|
|
97
|
+
- 7e1eb47: feat(db): add processAt scheduling and reusable durable hooks dispatchers.
|
|
98
|
+
- 1dc4e7f: fix: disable handlerTx retries when no retrieve ops and reject explicit retry policies
|
|
99
|
+
- 3c9fbac: fix(db): align GenericSQL migration defaults and constraint names with Drizzle output.
|
|
100
|
+
- a5ead11: feat(db): add Prisma adapter and SQLite Prisma profile support.
|
|
101
|
+
- c4d4cc6: feat: default to sqlite adapter when databaseAdapter is omitted (better-sqlite3
|
|
102
|
+
installed)
|
|
103
|
+
- d4baad3: fix: explicit databaseNamespace values are now used as-is without sanitization; default
|
|
104
|
+
namespace (from schema.name) is still sanitized
|
|
105
|
+
- 548bf37: feat(db): expose handlerTx in durable hook context and deprecate direct query engines.
|
|
106
|
+
- 3041732: fix: run durable hooks off-request and relax pending task leases
|
|
107
|
+
- 7e179d1: feat(db): remove workflows dispatcher packages in favor of db dispatchers.
|
|
108
|
+
- 0013fa6: fix(db): store outbox versionstamps as strings.
|
|
109
|
+
- 69b9a79: fix: harden durable hook claiming and wake scheduling
|
|
110
|
+
- 5cef16e: feat(db,test): add SQL outbox support and adapter testing configuration.
|
|
111
|
+
|
|
3
112
|
## 0.2.2
|
|
4
113
|
|
|
5
114
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
Optional, ORM-agnostic database layer for Fragno libraries.
|
|
4
4
|
|
|
5
|
-
Library authors define a type-safe schema; users plug in
|
|
6
|
-
data is written directly into their database.
|
|
5
|
+
Library authors define a type-safe schema; users plug in the SqlAdapter (configured with Kysely
|
|
6
|
+
dialects) so data is written directly into their database. Schema output can be generated for SQL
|
|
7
|
+
migrations, Drizzle, or Prisma workflows.
|
|
7
8
|
|
|
8
9
|
Full docs live at
|
|
9
10
|
[Database integration for library authors](https://fragno.dev/docs/fragno/for-library-authors/database-integration/overview).
|
|
@@ -39,7 +40,7 @@ pnpm add --dev @fragno-dev/cli
|
|
|
39
40
|
// schema.ts
|
|
40
41
|
import { schema, idColumn, column } from "@fragno-dev/db/schema";
|
|
41
42
|
|
|
42
|
-
export const commentSchema = schema((s) => {
|
|
43
|
+
export const commentSchema = schema("comment", (s) => {
|
|
43
44
|
return s
|
|
44
45
|
.addTable("comment", (t) => {
|
|
45
46
|
return t
|
|
@@ -91,22 +92,66 @@ export function createCommentLibrary(
|
|
|
91
92
|
}
|
|
92
93
|
```
|
|
93
94
|
|
|
94
|
-
Your users pass
|
|
95
|
+
Your users pass a SqlAdapter via `options`. If `better-sqlite3` is installed, `databaseAdapter` is
|
|
96
|
+
optional and defaults to a local SQLite file per fragment in `FRAGNO_DATA_DIR` (default:
|
|
97
|
+
`~/.fragno`).
|
|
98
|
+
|
|
99
|
+
```ts
|
|
100
|
+
// User's application code
|
|
101
|
+
import { SqlAdapter } from "@fragno-dev/db";
|
|
102
|
+
import { PostgresDialect } from "kysely";
|
|
103
|
+
import { Pool } from "pg";
|
|
104
|
+
|
|
105
|
+
const commentLib = createCommentLibrary(
|
|
106
|
+
{ maxCommentsPerPost: 10 },
|
|
107
|
+
{
|
|
108
|
+
databaseAdapter: new SqlAdapter({
|
|
109
|
+
dialect: new PostgresDialect({
|
|
110
|
+
pool: new Pool({
|
|
111
|
+
/* connection config */
|
|
112
|
+
}),
|
|
113
|
+
}),
|
|
114
|
+
}),
|
|
115
|
+
},
|
|
116
|
+
);
|
|
117
|
+
```
|
|
95
118
|
|
|
96
119
|
## Key features
|
|
97
120
|
|
|
98
121
|
- **Schema definition**: define tables, columns, indexes, and relations with a fluent, typed API.
|
|
99
122
|
- **Type-safe ORM**: full TypeScript inference for queries and results.
|
|
100
123
|
- **User-owned database**: your library never owns the database; users provide the adapter.
|
|
101
|
-
- **ORM agnostic**:
|
|
124
|
+
- **ORM agnostic**: SQL runtime with explicit schema output formats (SQL, Drizzle, Prisma).
|
|
102
125
|
- **Namespaced tables**: avoids conflicts with user tables.
|
|
103
126
|
|
|
104
|
-
##
|
|
127
|
+
## Internal registry + describe route
|
|
128
|
+
|
|
129
|
+
When multiple fragments share a database adapter, Fragno maintains an in-memory, adapter-scoped
|
|
130
|
+
registry of schemas and fragment mount routes. Each fragment exposes a lightweight internal describe
|
|
131
|
+
endpoint at `/_internal` (mounted under the fragment's mount route) that aggregates this registry.
|
|
132
|
+
|
|
133
|
+
Example response:
|
|
105
134
|
|
|
106
|
-
|
|
135
|
+
```json
|
|
136
|
+
{
|
|
137
|
+
"fragments": [{ "name": "comment-library", "mountRoute": "/api/comment-library" }],
|
|
138
|
+
"schemas": [
|
|
139
|
+
{ "name": "comment", "namespace": "comment", "version": 1, "tables": ["comment", "user"] }
|
|
140
|
+
],
|
|
141
|
+
"routes": { "internal": "/_internal", "outbox": "/_internal/outbox" }
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Notes:
|
|
146
|
+
|
|
147
|
+
- `schemas` excludes the internal Fragno schema.
|
|
148
|
+
- `fragments` only includes fragments that opted into outbox support via fragment options.
|
|
149
|
+
- `routes.outbox` is only present when at least one fragment has outbox enabled.
|
|
150
|
+
|
|
151
|
+
## ORM and database support
|
|
107
152
|
|
|
108
|
-
-
|
|
109
|
-
|
|
153
|
+
`@fragno-dev/db` works with Kysely dialects for runtime execution and supports SQL migrations plus
|
|
154
|
+
Drizzle or Prisma schema outputs.
|
|
110
155
|
|
|
111
156
|
Backed by Postgres and SQLite, including PGLite and Cloudflare Durable Objects.
|
|
112
157
|
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { AnySchema } from "../schema/create.js";
|
|
2
|
+
import { SqlNamingStrategy } from "../naming/sql-naming.js";
|
|
3
|
+
import { SQLiteStorageMode } from "./generic-sql/sqlite-storage.js";
|
|
2
4
|
import { IUnitOfWork } from "../query/unit-of-work/unit-of-work.js";
|
|
3
5
|
import { SimpleQueryInterface } from "../query/simple-query-interface.js";
|
|
4
|
-
import {
|
|
6
|
+
import { SQLProvider } from "../shared/providers.js";
|
|
5
7
|
import { PreparedMigrations } from "./generic-sql/migration/prepared-migrations.js";
|
|
6
8
|
import { RequestContextStorage } from "@fragno-dev/core/internal/request-context-storage";
|
|
7
9
|
|
|
@@ -15,12 +17,11 @@ declare const fragnoDatabaseAdapterVersionFakeSymbol: "$fragno-database-adapter-
|
|
|
15
17
|
type DatabaseContextStorage = {
|
|
16
18
|
uow: IUnitOfWork;
|
|
17
19
|
};
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
toLogical(physicalName: string): string;
|
|
20
|
+
type SQLiteProfile = "default" | "prisma";
|
|
21
|
+
interface DatabaseAdapterMetadata {
|
|
22
|
+
databaseType?: SQLProvider;
|
|
23
|
+
sqliteProfile?: SQLiteProfile;
|
|
24
|
+
sqliteStorageMode?: SQLiteStorageMode;
|
|
24
25
|
}
|
|
25
26
|
interface DatabaseAdapter<TUOWConfig = void> {
|
|
26
27
|
[fragnoDatabaseAdapterNameFakeSymbol]: string;
|
|
@@ -30,30 +31,31 @@ interface DatabaseAdapter<TUOWConfig = void> {
|
|
|
30
31
|
* This allows multiple fragments to participate in the same Unit of Work.
|
|
31
32
|
*/
|
|
32
33
|
readonly contextStorage: RequestContextStorage<DatabaseContextStorage>;
|
|
34
|
+
/**
|
|
35
|
+
* Optional adapter override used for durable hook processing.
|
|
36
|
+
* Use this when the public adapter wraps another adapter (e.g. model checker).
|
|
37
|
+
*/
|
|
38
|
+
getHookProcessingAdapter?: () => DatabaseAdapter<TUOWConfig>;
|
|
33
39
|
/**
|
|
34
40
|
* Get current schema version, undefined if not initialized.
|
|
35
41
|
*/
|
|
36
42
|
getSchemaVersion(namespace: string): Promise<string | undefined>;
|
|
37
|
-
createQueryEngine: <const T extends AnySchema>(schema: T, namespace: string) => SimpleQueryInterface<T, TUOWConfig>;
|
|
38
|
-
prepareMigrations?: <const T extends AnySchema>(schema: T, namespace: string) => PreparedMigrations;
|
|
39
43
|
/**
|
|
40
|
-
*
|
|
41
|
-
|
|
44
|
+
* Optional metadata used by schema output tooling.
|
|
45
|
+
*/
|
|
46
|
+
readonly adapterMetadata?: DatabaseAdapterMetadata;
|
|
47
|
+
/**
|
|
48
|
+
* Naming strategy used for physical SQL identifiers.
|
|
42
49
|
*/
|
|
43
|
-
|
|
44
|
-
schema: AnySchema;
|
|
45
|
-
namespace: string;
|
|
46
|
-
}[], options?: {
|
|
47
|
-
path?: string;
|
|
48
|
-
}) => SchemaGenerator;
|
|
50
|
+
readonly namingStrategy: SqlNamingStrategy;
|
|
49
51
|
/**
|
|
50
|
-
*
|
|
51
|
-
* Used to convert between logical table names and physical table names.
|
|
52
|
+
* @deprecated Avoid using query engines directly in fragment code. Prefer handlerTx/serviceTx.
|
|
52
53
|
*/
|
|
53
|
-
|
|
54
|
+
createQueryEngine: <const T extends AnySchema>(schema: T, namespace: string | null) => SimpleQueryInterface<T, TUOWConfig>;
|
|
55
|
+
prepareMigrations?: <const T extends AnySchema>(schema: T, namespace: string | null) => PreparedMigrations;
|
|
54
56
|
isConnectionHealthy: () => Promise<boolean>;
|
|
55
57
|
close: () => Promise<void>;
|
|
56
58
|
}
|
|
57
59
|
//#endregion
|
|
58
|
-
export { DatabaseAdapter, DatabaseContextStorage,
|
|
60
|
+
export { DatabaseAdapter, DatabaseAdapterMetadata, DatabaseContextStorage, SQLiteProfile, fragnoDatabaseAdapterNameFakeSymbol, fragnoDatabaseAdapterVersionFakeSymbol };
|
|
59
61
|
//# sourceMappingURL=adapters.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapters.d.ts","names":[],"sources":["../../src/adapters/adapters.ts"],"sourcesContent":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"adapters.d.ts","names":[],"sources":["../../src/adapters/adapters.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;cAUa;cACA;AADb;AACA;AAMA;AAIA;AAEiB,KANL,sBAAA,GAM4B;EACvB,GAAA,EANV,WAMU;CACC;AACI,KALV,aAAA,GAKU,SAAA,GAAA,QAAA;AAAiB,UAHtB,uBAAA,CAGsB;EAGtB,YAAA,CAAA,EALA,WAKe;EAC7B,aAAA,CAAA,EALe,aAKf;EACA,iBAAA,CAAA,EALmB,iBAKnB;;AAMwB,UARV,eAQU,CAAA,aAAA,IAAA,CAAA,CAAA;EAMwB,CAbhD,mCAAA,CAagD,EAAA,MAAA;EAAhB,CAZhC,sCAAA,CAYgC,EAAA,MAAA;EAKI;;;;EAgB3B,SAAA,cAAA,EA3Be,qBA2Bf,CA3BqC,sBA2BrC,CAAA;EAEgB;;;;EAGhB,wBAAA,CAAA,EAAA,GAAA,GA1BuB,eA0BvB,CA1BuC,UA0BvC,CAAA;EAEL;;;EAIe,gBAAA,CAAA,SAAA,EAAA,MAAA,CAAA,EA3BiB,OA2BjB,CAAA,MAAA,GAAA,SAAA,CAAA;;;;6BAtBO;;;;2BAKF;;;;sCAKW,mBAC1B,gCAEL,qBAAqB,GAAG;uCAEQ,mBAC3B,gCAEL;6BAEsB;eAEd"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapters.js","names":[],"sources":["../../src/adapters/adapters.ts"],"sourcesContent":["import type { SimpleQueryInterface } from \"../query/simple-query-interface\";\nimport type {
|
|
1
|
+
{"version":3,"file":"adapters.js","names":[],"sources":["../../src/adapters/adapters.ts"],"sourcesContent":["import type { RequestContextStorage } from \"@fragno-dev/core/internal/request-context-storage\";\n\nimport type { SqlNamingStrategy } from \"../naming/sql-naming\";\nimport type { SimpleQueryInterface } from \"../query/simple-query-interface\";\nimport type { IUnitOfWork } from \"../query/unit-of-work/unit-of-work\";\nimport type { AnySchema } from \"../schema/create\";\nimport type { SQLProvider } from \"../shared/providers\";\nimport type { PreparedMigrations } from \"./generic-sql/migration/prepared-migrations\";\nimport type { SQLiteStorageMode } from \"./generic-sql/sqlite-storage\";\n\nexport const fragnoDatabaseAdapterNameFakeSymbol = \"$fragno-database-adapter-name\" as const;\nexport const fragnoDatabaseAdapterVersionFakeSymbol = \"$fragno-database-adapter-version\" as const;\n\n/**\n * Storage type for database context - stores the Unit of Work.\n * This is shared across all fragments using the same adapter.\n */\nexport type DatabaseContextStorage = {\n uow: IUnitOfWork;\n};\n\nexport type SQLiteProfile = \"default\" | \"prisma\";\n\nexport interface DatabaseAdapterMetadata {\n databaseType?: SQLProvider;\n sqliteProfile?: SQLiteProfile;\n sqliteStorageMode?: SQLiteStorageMode;\n}\n\nexport interface DatabaseAdapter<TUOWConfig = void> {\n [fragnoDatabaseAdapterNameFakeSymbol]: string;\n [fragnoDatabaseAdapterVersionFakeSymbol]: number;\n\n /**\n * Request context storage shared across all fragments using this adapter.\n * This allows multiple fragments to participate in the same Unit of Work.\n */\n readonly contextStorage: RequestContextStorage<DatabaseContextStorage>;\n\n /**\n * Optional adapter override used for durable hook processing.\n * Use this when the public adapter wraps another adapter (e.g. model checker).\n */\n getHookProcessingAdapter?: () => DatabaseAdapter<TUOWConfig>;\n\n /**\n * Get current schema version, undefined if not initialized.\n */\n getSchemaVersion(namespace: string): Promise<string | undefined>;\n\n /**\n * Optional metadata used by schema output tooling.\n */\n readonly adapterMetadata?: DatabaseAdapterMetadata;\n\n /**\n * Naming strategy used for physical SQL identifiers.\n */\n readonly namingStrategy: SqlNamingStrategy;\n\n /**\n * @deprecated Avoid using query engines directly in fragment code. Prefer handlerTx/serviceTx.\n */\n createQueryEngine: <const T extends AnySchema>(\n schema: T,\n namespace: string | null,\n ) => SimpleQueryInterface<T, TUOWConfig>;\n\n prepareMigrations?: <const T extends AnySchema>(\n schema: T,\n namespace: string | null,\n ) => PreparedMigrations;\n\n isConnectionHealthy: () => Promise<boolean>;\n\n close: () => Promise<void>;\n}\n"],"mappings":";AAUA,MAAa,sCAAsC;AACnD,MAAa,yCAAyC"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { SqlNamingStrategy } from "../../naming/sql-naming.js";
|
|
2
|
+
|
|
1
3
|
//#region src/adapters/generic-sql/driver-config.d.ts
|
|
2
4
|
declare const supportedDatabases: readonly ["sqlite", "postgresql", "mysql"];
|
|
3
5
|
type SupportedDatabase = (typeof supportedDatabases)[number];
|
|
@@ -8,12 +10,17 @@ declare abstract class DriverConfig<T extends SupportedDriverType = SupportedDri
|
|
|
8
10
|
abstract readonly databaseType: SupportedDatabase;
|
|
9
11
|
abstract readonly supportsReturning: boolean;
|
|
10
12
|
abstract readonly supportsJson: boolean;
|
|
13
|
+
abstract readonly outboxVersionstampStrategy: OutboxVersionstampStrategy;
|
|
11
14
|
/**
|
|
12
15
|
* Column name for internal ID in RETURNING results.
|
|
13
16
|
* Only defined if supportsReturning is true.
|
|
14
17
|
*/
|
|
15
18
|
abstract readonly internalIdColumn: string | undefined;
|
|
19
|
+
/**
|
|
20
|
+
* SQLite storage selection is handled by adapters, not driver config.
|
|
21
|
+
*/
|
|
16
22
|
get supportsRowsAffected(): boolean;
|
|
23
|
+
get defaultNamingStrategy(): SqlNamingStrategy;
|
|
17
24
|
/**
|
|
18
25
|
* Extract the number of affected rows from a query result.
|
|
19
26
|
* Only implemented for drivers that support affected rows reporting.
|
|
@@ -24,12 +31,15 @@ declare abstract class DriverConfig<T extends SupportedDriverType = SupportedDri
|
|
|
24
31
|
*/
|
|
25
32
|
extractAffectedRows?(result: Record<string, unknown>): bigint;
|
|
26
33
|
}
|
|
34
|
+
declare const defaultNamingStrategyForDatabase: (databaseType: SupportedDatabase) => SqlNamingStrategy;
|
|
35
|
+
type OutboxVersionstampStrategy = "update-returning" | "insert-on-conflict-returning" | "insert-on-duplicate-last-insert-id";
|
|
27
36
|
declare class SQLocalDriverConfig extends DriverConfig<"sqlocal"> {
|
|
28
37
|
readonly driverType = "sqlocal";
|
|
29
38
|
readonly databaseType = "sqlite";
|
|
30
39
|
readonly supportsReturning = true;
|
|
31
40
|
readonly supportsJson = false;
|
|
32
41
|
readonly internalIdColumn = "_internalId";
|
|
42
|
+
readonly outboxVersionstampStrategy = "insert-on-conflict-returning";
|
|
33
43
|
}
|
|
34
44
|
declare class CloudflareDurableObjectsDriverConfig extends DriverConfig<"cloudflare_durable_objects"> {
|
|
35
45
|
readonly driverType = "cloudflare_durable_objects";
|
|
@@ -37,6 +47,7 @@ declare class CloudflareDurableObjectsDriverConfig extends DriverConfig<"cloudfl
|
|
|
37
47
|
readonly supportsReturning = true;
|
|
38
48
|
readonly supportsJson = false;
|
|
39
49
|
readonly internalIdColumn = "_internalId";
|
|
50
|
+
readonly outboxVersionstampStrategy = "insert-on-conflict-returning";
|
|
40
51
|
}
|
|
41
52
|
declare class BetterSQLite3DriverConfig extends DriverConfig<"better-sqlite3"> {
|
|
42
53
|
readonly driverType = "better-sqlite3";
|
|
@@ -44,6 +55,7 @@ declare class BetterSQLite3DriverConfig extends DriverConfig<"better-sqlite3"> {
|
|
|
44
55
|
readonly supportsReturning = true;
|
|
45
56
|
readonly supportsJson = false;
|
|
46
57
|
readonly internalIdColumn = "_internalId";
|
|
58
|
+
readonly outboxVersionstampStrategy = "insert-on-conflict-returning";
|
|
47
59
|
extractAffectedRows(result: Record<string, unknown>): bigint;
|
|
48
60
|
}
|
|
49
61
|
declare class NodePostgresDriverConfig extends DriverConfig<"pg"> {
|
|
@@ -52,6 +64,7 @@ declare class NodePostgresDriverConfig extends DriverConfig<"pg"> {
|
|
|
52
64
|
readonly supportsReturning = true;
|
|
53
65
|
readonly supportsJson = true;
|
|
54
66
|
readonly internalIdColumn = "_internalId";
|
|
67
|
+
readonly outboxVersionstampStrategy = "insert-on-conflict-returning";
|
|
55
68
|
extractAffectedRows(result: Record<string, unknown>): bigint;
|
|
56
69
|
}
|
|
57
70
|
declare class PGLiteDriverConfig extends DriverConfig<"pglite"> {
|
|
@@ -60,6 +73,7 @@ declare class PGLiteDriverConfig extends DriverConfig<"pglite"> {
|
|
|
60
73
|
readonly supportsReturning = true;
|
|
61
74
|
readonly supportsJson = true;
|
|
62
75
|
readonly internalIdColumn = "_internalId";
|
|
76
|
+
readonly outboxVersionstampStrategy = "insert-on-conflict-returning";
|
|
63
77
|
extractAffectedRows(result: Record<string, unknown>): bigint;
|
|
64
78
|
}
|
|
65
79
|
declare class MySQL2DriverConfig extends DriverConfig<"mysql2"> {
|
|
@@ -68,7 +82,8 @@ declare class MySQL2DriverConfig extends DriverConfig<"mysql2"> {
|
|
|
68
82
|
readonly supportsReturning = false;
|
|
69
83
|
readonly supportsJson = true;
|
|
70
84
|
readonly internalIdColumn: undefined;
|
|
85
|
+
readonly outboxVersionstampStrategy = "insert-on-duplicate-last-insert-id";
|
|
71
86
|
}
|
|
72
87
|
//#endregion
|
|
73
|
-
export { BetterSQLite3DriverConfig, CloudflareDurableObjectsDriverConfig, DriverConfig, MySQL2DriverConfig, NodePostgresDriverConfig, PGLiteDriverConfig, SQLocalDriverConfig, SupportedDatabase, SupportedDriverType, supportedDatabases, supportedDriverTypes };
|
|
88
|
+
export { BetterSQLite3DriverConfig, CloudflareDurableObjectsDriverConfig, DriverConfig, MySQL2DriverConfig, NodePostgresDriverConfig, OutboxVersionstampStrategy, PGLiteDriverConfig, SQLocalDriverConfig, SupportedDatabase, SupportedDriverType, defaultNamingStrategyForDatabase, supportedDatabases, supportedDriverTypes };
|
|
74
89
|
//# sourceMappingURL=driver-config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driver-config.d.ts","names":[],"sources":["../../../src/adapters/generic-sql/driver-config.ts"],"sourcesContent":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"driver-config.d.ts","names":[],"sources":["../../../src/adapters/generic-sql/driver-config.ts"],"sourcesContent":[],"mappings":";;;cAMa;KACD,iBAAA,WAA4B;AAD3B,cAGA,oBAH+D,EAAA,SAAA,CAAA,SAAA,EAAA,4BAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,QAAA,EAAA,QAAA,CAAA;AAChE,KAWA,mBAAA,GAXiB,CAAA,OAWa,oBAXgB,CAAA,CAAA,MAAA,CAAA;AAE7C,uBAWS,YAJZ,CAAA,UAImC,mBAJnC,GAIyD,mBAJzD,CAAA,CAAA;EAEE,kBAAA,UAAmB,EAGC,CAHD;EAET,kBAAY,YAAA,EAEA,iBAFA;EAAW,kBAAA,iBAAA,EAAA,OAAA;EAAsB,kBAAA,YAAA,EAAA,OAAA;EACnC,kBAAA,0BAAA,EAKgB,0BALhB;EACE;;;;EA+BG,kBAAA,gBAAA,EAAA,MAAA,GAAA,SAAA;EAGxB;AAab;AAKA;EASa,IAAA,oBAAA,CAAA,CAAA,EAAA,OAAA;EASA,IAAA,qBAAA,CAAA,CAAA,EAnDkB,iBA2DQ;EAiB1B;AAiCb;AAwBA;;;;;;+BAzH+B;;cAGlB,iDACG,sBACb;KAWS,0BAAA;cAKC,mBAAA,SAA4B;;;;;;;;cAS5B,oCAAA,SAA6C;;;;;;;;cAS7C,yBAAA,SAAkC;;;;;;;8BAQR;;cAiB1B,wBAAA,SAAiC;;;;;;;8BAQP;;cAyB1B,kBAAA,SAA2B;;;;;;;8BAQD;;cAgB1B,kBAAA,SAA2B"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { schemaNamingStrategy, suffixNamingStrategy } from "../../naming/sql-naming.js";
|
|
2
|
+
|
|
1
3
|
//#region src/adapters/generic-sql/driver-config.ts
|
|
2
4
|
const supportedDatabases = [
|
|
3
5
|
"sqlite",
|
|
@@ -13,9 +15,23 @@ const supportedDriverTypes = [
|
|
|
13
15
|
"mysql2"
|
|
14
16
|
];
|
|
15
17
|
var DriverConfig = class {
|
|
18
|
+
/**
|
|
19
|
+
* SQLite storage selection is handled by adapters, not driver config.
|
|
20
|
+
*/
|
|
16
21
|
get supportsRowsAffected() {
|
|
17
22
|
return !!this.extractAffectedRows;
|
|
18
23
|
}
|
|
24
|
+
get defaultNamingStrategy() {
|
|
25
|
+
return defaultNamingStrategyForDatabase(this.databaseType);
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
const defaultNamingStrategyForDatabase = (databaseType) => {
|
|
29
|
+
switch (databaseType) {
|
|
30
|
+
case "postgresql": return schemaNamingStrategy;
|
|
31
|
+
case "sqlite":
|
|
32
|
+
case "mysql":
|
|
33
|
+
default: return suffixNamingStrategy;
|
|
34
|
+
}
|
|
19
35
|
};
|
|
20
36
|
var SQLocalDriverConfig = class extends DriverConfig {
|
|
21
37
|
driverType = "sqlocal";
|
|
@@ -23,6 +39,7 @@ var SQLocalDriverConfig = class extends DriverConfig {
|
|
|
23
39
|
supportsReturning = true;
|
|
24
40
|
supportsJson = false;
|
|
25
41
|
internalIdColumn = "_internalId";
|
|
42
|
+
outboxVersionstampStrategy = "insert-on-conflict-returning";
|
|
26
43
|
};
|
|
27
44
|
var CloudflareDurableObjectsDriverConfig = class extends DriverConfig {
|
|
28
45
|
driverType = "cloudflare_durable_objects";
|
|
@@ -30,6 +47,7 @@ var CloudflareDurableObjectsDriverConfig = class extends DriverConfig {
|
|
|
30
47
|
supportsReturning = true;
|
|
31
48
|
supportsJson = false;
|
|
32
49
|
internalIdColumn = "_internalId";
|
|
50
|
+
outboxVersionstampStrategy = "insert-on-conflict-returning";
|
|
33
51
|
};
|
|
34
52
|
var BetterSQLite3DriverConfig = class extends DriverConfig {
|
|
35
53
|
driverType = "better-sqlite3";
|
|
@@ -37,6 +55,7 @@ var BetterSQLite3DriverConfig = class extends DriverConfig {
|
|
|
37
55
|
supportsReturning = true;
|
|
38
56
|
supportsJson = false;
|
|
39
57
|
internalIdColumn = "_internalId";
|
|
58
|
+
outboxVersionstampStrategy = "insert-on-conflict-returning";
|
|
40
59
|
extractAffectedRows(result) {
|
|
41
60
|
if ("numAffectedRows" in result) {
|
|
42
61
|
const value = result["numAffectedRows"];
|
|
@@ -52,6 +71,7 @@ var NodePostgresDriverConfig = class extends DriverConfig {
|
|
|
52
71
|
supportsReturning = true;
|
|
53
72
|
supportsJson = true;
|
|
54
73
|
internalIdColumn = "_internalId";
|
|
74
|
+
outboxVersionstampStrategy = "insert-on-conflict-returning";
|
|
55
75
|
extractAffectedRows(result) {
|
|
56
76
|
if ("numAffectedRows" in result) {
|
|
57
77
|
const value = result["numAffectedRows"];
|
|
@@ -72,6 +92,7 @@ var PGLiteDriverConfig = class extends DriverConfig {
|
|
|
72
92
|
supportsReturning = true;
|
|
73
93
|
supportsJson = true;
|
|
74
94
|
internalIdColumn = "_internalId";
|
|
95
|
+
outboxVersionstampStrategy = "insert-on-conflict-returning";
|
|
75
96
|
extractAffectedRows(result) {
|
|
76
97
|
if ("affectedRows" in result) {
|
|
77
98
|
const value = result["affectedRows"];
|
|
@@ -87,8 +108,9 @@ var MySQL2DriverConfig = class extends DriverConfig {
|
|
|
87
108
|
supportsReturning = false;
|
|
88
109
|
supportsJson = true;
|
|
89
110
|
internalIdColumn = void 0;
|
|
111
|
+
outboxVersionstampStrategy = "insert-on-duplicate-last-insert-id";
|
|
90
112
|
};
|
|
91
113
|
|
|
92
114
|
//#endregion
|
|
93
|
-
export { BetterSQLite3DriverConfig, CloudflareDurableObjectsDriverConfig, DriverConfig, MySQL2DriverConfig, NodePostgresDriverConfig, PGLiteDriverConfig, SQLocalDriverConfig, supportedDatabases, supportedDriverTypes };
|
|
115
|
+
export { BetterSQLite3DriverConfig, CloudflareDurableObjectsDriverConfig, DriverConfig, MySQL2DriverConfig, NodePostgresDriverConfig, PGLiteDriverConfig, SQLocalDriverConfig, defaultNamingStrategyForDatabase, supportedDatabases, supportedDriverTypes };
|
|
94
116
|
//# sourceMappingURL=driver-config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driver-config.js","names":[],"sources":["../../../src/adapters/generic-sql/driver-config.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"driver-config.js","names":[],"sources":["../../../src/adapters/generic-sql/driver-config.ts"],"sourcesContent":["import {\n schemaNamingStrategy,\n suffixNamingStrategy,\n type SqlNamingStrategy,\n} from \"../../naming/sql-naming\";\n\nexport const supportedDatabases = [\"sqlite\", \"postgresql\", \"mysql\"] as const;\nexport type SupportedDatabase = (typeof supportedDatabases)[number];\n\nexport const supportedDriverTypes = [\n \"sqlocal\",\n \"cloudflare_durable_objects\",\n \"better-sqlite3\",\n \"pg\",\n \"pglite\",\n \"mysql2\",\n] as const;\n\nexport type SupportedDriverType = (typeof supportedDriverTypes)[number];\n\nexport abstract class DriverConfig<T extends SupportedDriverType = SupportedDriverType> {\n abstract readonly driverType: T;\n abstract readonly databaseType: SupportedDatabase;\n\n abstract readonly supportsReturning: boolean;\n abstract readonly supportsJson: boolean;\n abstract readonly outboxVersionstampStrategy: OutboxVersionstampStrategy;\n\n /**\n * Column name for internal ID in RETURNING results.\n * Only defined if supportsReturning is true.\n */\n abstract readonly internalIdColumn: string | undefined;\n\n /**\n * SQLite storage selection is handled by adapters, not driver config.\n */\n get supportsRowsAffected(): boolean {\n return !!this.extractAffectedRows;\n }\n\n get defaultNamingStrategy(): SqlNamingStrategy {\n return defaultNamingStrategyForDatabase(this.databaseType);\n }\n\n /**\n * Extract the number of affected rows from a query result.\n * Only implemented for drivers that support affected rows reporting.\n *\n * @param result - The query result from the SQL driver\n * @returns The number of affected rows as bigint\n * @throws Error if affected rows information is not found in the result\n */\n extractAffectedRows?(result: Record<string, unknown>): bigint;\n}\n\nexport const defaultNamingStrategyForDatabase = (\n databaseType: SupportedDatabase,\n): SqlNamingStrategy => {\n switch (databaseType) {\n case \"postgresql\":\n return schemaNamingStrategy;\n case \"sqlite\":\n case \"mysql\":\n default:\n return suffixNamingStrategy;\n }\n};\n\nexport type OutboxVersionstampStrategy =\n | \"update-returning\"\n | \"insert-on-conflict-returning\"\n | \"insert-on-duplicate-last-insert-id\";\n\nexport class SQLocalDriverConfig extends DriverConfig<\"sqlocal\"> {\n override readonly driverType = \"sqlocal\";\n override readonly databaseType = \"sqlite\";\n override readonly supportsReturning = true;\n override readonly supportsJson = false;\n override readonly internalIdColumn = \"_internalId\";\n override readonly outboxVersionstampStrategy = \"insert-on-conflict-returning\";\n}\n\nexport class CloudflareDurableObjectsDriverConfig extends DriverConfig<\"cloudflare_durable_objects\"> {\n override readonly driverType = \"cloudflare_durable_objects\";\n override readonly databaseType = \"sqlite\";\n override readonly supportsReturning = true;\n override readonly supportsJson = false;\n override readonly internalIdColumn = \"_internalId\";\n override readonly outboxVersionstampStrategy = \"insert-on-conflict-returning\";\n}\n\nexport class BetterSQLite3DriverConfig extends DriverConfig<\"better-sqlite3\"> {\n override readonly driverType = \"better-sqlite3\";\n override readonly databaseType = \"sqlite\";\n override readonly supportsReturning = true;\n override readonly supportsJson = false;\n override readonly internalIdColumn = \"_internalId\";\n override readonly outboxVersionstampStrategy = \"insert-on-conflict-returning\";\n\n override extractAffectedRows(result: Record<string, unknown>): bigint {\n if (\"numAffectedRows\" in result) {\n const value = result[\"numAffectedRows\"];\n if (typeof value === \"bigint\") {\n return value;\n }\n if (typeof value === \"number\") {\n return BigInt(value);\n }\n }\n\n throw new Error(\n `No affected rows found in result: ${JSON.stringify(result)}. Driver ${this.driverType} is expected to support affected rows.`,\n );\n }\n}\n\nexport class NodePostgresDriverConfig extends DriverConfig<\"pg\"> {\n override readonly driverType = \"pg\";\n override readonly databaseType = \"postgresql\";\n override readonly supportsReturning = true;\n override readonly supportsJson = true;\n override readonly internalIdColumn = \"_internalId\";\n override readonly outboxVersionstampStrategy = \"insert-on-conflict-returning\";\n\n override extractAffectedRows(result: Record<string, unknown>): bigint {\n if (\"numAffectedRows\" in result) {\n const value = result[\"numAffectedRows\"];\n if (typeof value === \"bigint\") {\n return value;\n }\n if (typeof value === \"number\") {\n return BigInt(value);\n }\n }\n if (\"numChangedRows\" in result) {\n const value = result[\"numChangedRows\"];\n if (typeof value === \"bigint\") {\n return value;\n }\n if (typeof value === \"number\") {\n return BigInt(value);\n }\n }\n throw new Error(\n `No affected rows found in result: ${JSON.stringify(result)}. Driver ${this.driverType} is expected to support affected rows.`,\n );\n }\n}\n\nexport class PGLiteDriverConfig extends DriverConfig<\"pglite\"> {\n override readonly driverType = \"pglite\";\n override readonly databaseType = \"postgresql\";\n override readonly supportsReturning = true;\n override readonly supportsJson = true;\n override readonly internalIdColumn = \"_internalId\";\n override readonly outboxVersionstampStrategy = \"insert-on-conflict-returning\";\n\n override extractAffectedRows(result: Record<string, unknown>): bigint {\n if (\"affectedRows\" in result) {\n const value = result[\"affectedRows\"];\n if (typeof value === \"bigint\") {\n return value;\n }\n if (typeof value === \"number\") {\n return BigInt(value);\n }\n }\n throw new Error(\n `No affected rows found in result: ${JSON.stringify(result)}. Driver ${this.driverType} is expected to support affected rows.`,\n );\n }\n}\n\nexport class MySQL2DriverConfig extends DriverConfig<\"mysql2\"> {\n override readonly driverType = \"mysql2\";\n override readonly databaseType = \"mysql\";\n override readonly supportsReturning = false;\n override readonly supportsJson = true;\n override readonly internalIdColumn = undefined;\n override readonly outboxVersionstampStrategy = \"insert-on-duplicate-last-insert-id\";\n}\n"],"mappings":";;;AAMA,MAAa,qBAAqB;CAAC;CAAU;CAAc;CAAQ;AAGnE,MAAa,uBAAuB;CAClC;CACA;CACA;CACA;CACA;CACA;CACD;AAID,IAAsB,eAAtB,MAAwF;;;;CAiBtF,IAAI,uBAAgC;AAClC,SAAO,CAAC,CAAC,KAAK;;CAGhB,IAAI,wBAA2C;AAC7C,SAAO,iCAAiC,KAAK,aAAa;;;AAc9D,MAAa,oCACX,iBACsB;AACtB,SAAQ,cAAR;EACE,KAAK,aACH,QAAO;EACT,KAAK;EACL,KAAK;EACL,QACE,QAAO;;;AASb,IAAa,sBAAb,cAAyC,aAAwB;CAC/D,AAAkB,aAAa;CAC/B,AAAkB,eAAe;CACjC,AAAkB,oBAAoB;CACtC,AAAkB,eAAe;CACjC,AAAkB,mBAAmB;CACrC,AAAkB,6BAA6B;;AAGjD,IAAa,uCAAb,cAA0D,aAA2C;CACnG,AAAkB,aAAa;CAC/B,AAAkB,eAAe;CACjC,AAAkB,oBAAoB;CACtC,AAAkB,eAAe;CACjC,AAAkB,mBAAmB;CACrC,AAAkB,6BAA6B;;AAGjD,IAAa,4BAAb,cAA+C,aAA+B;CAC5E,AAAkB,aAAa;CAC/B,AAAkB,eAAe;CACjC,AAAkB,oBAAoB;CACtC,AAAkB,eAAe;CACjC,AAAkB,mBAAmB;CACrC,AAAkB,6BAA6B;CAE/C,AAAS,oBAAoB,QAAyC;AACpE,MAAI,qBAAqB,QAAQ;GAC/B,MAAM,QAAQ,OAAO;AACrB,OAAI,OAAO,UAAU,SACnB,QAAO;AAET,OAAI,OAAO,UAAU,SACnB,QAAO,OAAO,MAAM;;AAIxB,QAAM,IAAI,MACR,qCAAqC,KAAK,UAAU,OAAO,CAAC,WAAW,KAAK,WAAW,wCACxF;;;AAIL,IAAa,2BAAb,cAA8C,aAAmB;CAC/D,AAAkB,aAAa;CAC/B,AAAkB,eAAe;CACjC,AAAkB,oBAAoB;CACtC,AAAkB,eAAe;CACjC,AAAkB,mBAAmB;CACrC,AAAkB,6BAA6B;CAE/C,AAAS,oBAAoB,QAAyC;AACpE,MAAI,qBAAqB,QAAQ;GAC/B,MAAM,QAAQ,OAAO;AACrB,OAAI,OAAO,UAAU,SACnB,QAAO;AAET,OAAI,OAAO,UAAU,SACnB,QAAO,OAAO,MAAM;;AAGxB,MAAI,oBAAoB,QAAQ;GAC9B,MAAM,QAAQ,OAAO;AACrB,OAAI,OAAO,UAAU,SACnB,QAAO;AAET,OAAI,OAAO,UAAU,SACnB,QAAO,OAAO,MAAM;;AAGxB,QAAM,IAAI,MACR,qCAAqC,KAAK,UAAU,OAAO,CAAC,WAAW,KAAK,WAAW,wCACxF;;;AAIL,IAAa,qBAAb,cAAwC,aAAuB;CAC7D,AAAkB,aAAa;CAC/B,AAAkB,eAAe;CACjC,AAAkB,oBAAoB;CACtC,AAAkB,eAAe;CACjC,AAAkB,mBAAmB;CACrC,AAAkB,6BAA6B;CAE/C,AAAS,oBAAoB,QAAyC;AACpE,MAAI,kBAAkB,QAAQ;GAC5B,MAAM,QAAQ,OAAO;AACrB,OAAI,OAAO,UAAU,SACnB,QAAO;AAET,OAAI,OAAO,UAAU,SACnB,QAAO,OAAO,MAAM;;AAGxB,QAAM,IAAI,MACR,qCAAqC,KAAK,UAAU,OAAO,CAAC,WAAW,KAAK,WAAW,wCACxF;;;AAIL,IAAa,qBAAb,cAAwC,aAAuB;CAC7D,AAAkB,aAAa;CAC/B,AAAkB,eAAe;CACjC,AAAkB,oBAAoB;CACtC,AAAkB,eAAe;CACjC,AAAkB,mBAAmB;CACrC,AAAkB,6BAA6B"}
|
|
@@ -1,43 +1,58 @@
|
|
|
1
1
|
import { AnySchema } from "../../schema/create.js";
|
|
2
|
+
import { SqlNamingStrategy } from "../../naming/sql-naming.js";
|
|
2
3
|
import { DriverConfig } from "./driver-config.js";
|
|
4
|
+
import { SQLiteStorageMode, sqliteStorageDefault, sqliteStoragePrisma } from "./sqlite-storage.js";
|
|
5
|
+
import { OutboxConfig } from "../../outbox/outbox.js";
|
|
6
|
+
import { UOWInstrumentation } from "../../query/unit-of-work/unit-of-work.js";
|
|
3
7
|
import { SimpleQueryInterface } from "../../query/simple-query-interface.js";
|
|
4
8
|
import { CompiledQuery, Dialect } from "../../sql-driver/sql-driver.js";
|
|
5
9
|
import { SqlDriverAdapter } from "../../sql-driver/sql-driver-adapter.js";
|
|
6
10
|
import { PreparedMigrations } from "./migration/prepared-migrations.js";
|
|
7
|
-
import { DatabaseAdapter, DatabaseContextStorage,
|
|
11
|
+
import { DatabaseAdapter, DatabaseAdapterMetadata, DatabaseContextStorage, SQLiteProfile, fragnoDatabaseAdapterNameFakeSymbol, fragnoDatabaseAdapterVersionFakeSymbol } from "../adapters.js";
|
|
8
12
|
import { RequestContextStorage } from "@fragno-dev/core/internal/request-context-storage";
|
|
9
13
|
|
|
10
14
|
//#region src/adapters/generic-sql/generic-sql-adapter.d.ts
|
|
11
15
|
interface UnitOfWorkConfig {
|
|
12
16
|
onQuery?: (query: CompiledQuery) => void;
|
|
13
17
|
dryRun?: boolean;
|
|
18
|
+
instrumentation?: UOWInstrumentation;
|
|
14
19
|
}
|
|
15
|
-
interface
|
|
20
|
+
interface SqlAdapterOptions {
|
|
16
21
|
dialect: Dialect;
|
|
17
22
|
driverConfig: DriverConfig;
|
|
18
23
|
uowConfig?: UnitOfWorkConfig;
|
|
24
|
+
sqliteProfile?: SQLiteProfile;
|
|
25
|
+
sqliteStorageMode?: SQLiteStorageMode;
|
|
26
|
+
namingStrategy?: SqlNamingStrategy;
|
|
19
27
|
}
|
|
20
|
-
declare
|
|
28
|
+
declare const sqliteProfiles: Record<SQLiteProfile, SQLiteStorageMode>;
|
|
29
|
+
declare class SqlAdapter implements DatabaseAdapter<UnitOfWorkConfig> {
|
|
21
30
|
#private;
|
|
22
31
|
readonly dialect: Dialect;
|
|
23
32
|
readonly driverConfig: DriverConfig;
|
|
24
33
|
readonly uowConfig?: UnitOfWorkConfig;
|
|
34
|
+
readonly sqliteStorageMode?: SQLiteStorageMode;
|
|
35
|
+
readonly sqliteProfile?: SQLiteProfile;
|
|
36
|
+
readonly adapterMetadata: DatabaseAdapterMetadata;
|
|
37
|
+
readonly namingStrategy: SqlNamingStrategy;
|
|
25
38
|
constructor({
|
|
26
39
|
dialect,
|
|
27
40
|
driverConfig,
|
|
28
|
-
uowConfig
|
|
29
|
-
|
|
41
|
+
uowConfig,
|
|
42
|
+
sqliteProfile,
|
|
43
|
+
sqliteStorageMode,
|
|
44
|
+
namingStrategy
|
|
45
|
+
}: SqlAdapterOptions);
|
|
30
46
|
get driver(): SqlDriverAdapter;
|
|
31
47
|
get [fragnoDatabaseAdapterNameFakeSymbol](): string;
|
|
32
48
|
get [fragnoDatabaseAdapterVersionFakeSymbol](): number;
|
|
33
49
|
get contextStorage(): RequestContextStorage<DatabaseContextStorage>;
|
|
34
50
|
close(): Promise<void>;
|
|
35
51
|
isConnectionHealthy(): Promise<boolean>;
|
|
36
|
-
prepareMigrations<T extends AnySchema>(schema: T, namespace: string): PreparedMigrations;
|
|
37
|
-
createTableNameMapper(namespace: string): TableNameMapper;
|
|
52
|
+
prepareMigrations<T extends AnySchema>(schema: T, namespace: string | null): PreparedMigrations;
|
|
38
53
|
getSchemaVersion(namespace: string): Promise<string | undefined>;
|
|
39
|
-
createQueryEngine<T extends AnySchema>(schema: T, namespace: string): SimpleQueryInterface<T, UnitOfWorkConfig>;
|
|
54
|
+
createQueryEngine<T extends AnySchema>(schema: T, namespace: string | null): SimpleQueryInterface<T, UnitOfWorkConfig>;
|
|
40
55
|
}
|
|
41
56
|
//#endregion
|
|
42
|
-
export {
|
|
57
|
+
export { SqlAdapter, SqlAdapterOptions, UnitOfWorkConfig, sqliteProfiles };
|
|
43
58
|
//# sourceMappingURL=generic-sql-adapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generic-sql-adapter.d.ts","names":[],"sources":["../../../src/adapters/generic-sql/generic-sql-adapter.ts"],"sourcesContent":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generic-sql-adapter.d.ts","names":[],"sources":["../../../src/adapters/generic-sql/generic-sql-adapter.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;;UAoCiB,gBAAA;oBACG;;EADH,eAAA,CAAA,EAGG,kBAFA;AAKpB;AACW,UADM,iBAAA,CACN;EACK,OAAA,EADL,OACK;EACF,YAAA,EADE,YACF;EACI,SAAA,CAAA,EADJ,gBACI;EACI,aAAA,CAAA,EADJ,aACI;EACH,iBAAA,CAAA,EADG,iBACH;EAAiB,cAAA,CAAA,EAAjB,iBAAiB;AAGpC;AAAoC,cAAvB,cAAuB,EAAP,MAAO,CAAA,aAAA,EAAe,iBAAf,CAAA;AAAe,cAKtC,UAAA,YAAsB,eALgB,CAKA,gBALA,CAAA,CAAA;EAAtB,CAAA,OAAA;EAAM,SAAA,OAAA,EAMf,OANe;EAKtB,SAAA,YAAW,EAEC,YAFD;EAA2B,SAAA,SAAA,CAAA,EAG5B,gBAH4B;EAC/B,SAAA,iBAAA,CAAA,EAGW,iBAHX;EACK,SAAA,aAAA,CAAA,EAGE,aAHF;EACF,SAAA,eAAA,EAGK,uBAHL;EACQ,SAAA,cAAA,EAGJ,iBAHI;EACJ,WAAA,CAAA;IAAA,OAAA;IAAA,YAAA;IAAA,SAAA;IAAA,aAAA;IAAA,iBAAA;IAAA;EAAA,CAAA,EAgBtB,iBAhBsB;EACC,IAAA,MAAA,CAAA,CAAA,EA6CZ,gBA7CY;EACD,KAgDpB,mCAAA,GAhDoB,EAAA,MAAA;EAQvB,KA4CG,sCAAA,GA5CH,EAAA,MAAA;EACA,IAAA,cAAA,CAAA,CAAA,EA+CoB,qBA/CpB,CA+C0C,sBA/C1C,CAAA;EACA,KAAA,CAAA,CAAA,EAkDO,OAlDP,CAAA,IAAA,CAAA;EACA,mBAAA,CAAA,CAAA,EAqD2B,OArD3B,CAAA,OAAA,CAAA;EACA,iBAAA,CAAA,UA0D0B,SA1D1B,CAAA,CAAA,MAAA,EA0D6C,CA1D7C,EAAA,SAAA,EAAA,MAAA,GAAA,IAAA,CAAA,EA0D2E,kBA1D3E;EACA,gBAAA,CAAA,SAAA,EAAA,MAAA,CAAA,EAsEyC,OAtEzC,CAAA,MAAA,GAAA,SAAA,CAAA;EACC,iBAAA,CAAA,UAkGyB,SAlGzB,CAAA,CAAA,MAAA,EAmGO,CAnGP,EAAA,SAAA,EAAA,MAAA,GAAA,IAAA,CAAA,EAqGA,oBArGA,CAqGqB,CArGrB,EAqGwB,gBArGxB,CAAA"}
|