@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
|
@@ -1,103 +1,148 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
1
|
+
import { instantiate } from "@fragno-dev/core";
|
|
2
|
+
|
|
3
3
|
import {
|
|
4
4
|
fragnoDatabaseAdapterNameFakeSymbol,
|
|
5
5
|
fragnoDatabaseAdapterVersionFakeSymbol,
|
|
6
6
|
} from "../adapters/adapters";
|
|
7
|
+
import { supportedDatabases, type SupportedDatabase } from "../adapters/generic-sql/driver-config";
|
|
7
8
|
import {
|
|
8
9
|
internalFragmentDef,
|
|
9
10
|
internalSchema,
|
|
10
|
-
|
|
11
|
+
SETTINGS_TABLE_NAME,
|
|
11
12
|
getSchemaVersionFromDatabase,
|
|
12
13
|
} from "../fragments/internal-fragment";
|
|
13
|
-
import {
|
|
14
|
+
import { getRegistryForAdapterSync } from "../internal/adapter-registry";
|
|
15
|
+
import type { FragnoDatabase } from "../mod";
|
|
16
|
+
import { generateDrizzleSchema } from "../schema-output/drizzle";
|
|
17
|
+
import { generatePrismaSchema } from "../schema-output/prisma";
|
|
18
|
+
import type { AnySchema } from "../schema/create";
|
|
14
19
|
|
|
15
20
|
export interface GenerationEngineResult {
|
|
16
21
|
schema: string;
|
|
17
22
|
path: string;
|
|
18
|
-
namespace: string;
|
|
23
|
+
namespace: string | null;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export type SchemaOutputFormat = "sql" | "drizzle" | "prisma";
|
|
27
|
+
|
|
28
|
+
export interface GenerateSchemaOptions {
|
|
29
|
+
format?: SchemaOutputFormat;
|
|
30
|
+
path?: string;
|
|
31
|
+
toVersion?: number;
|
|
32
|
+
fromVersion?: number;
|
|
19
33
|
}
|
|
20
34
|
|
|
21
35
|
export interface GenerationInternalResult {
|
|
22
36
|
schema: string;
|
|
23
37
|
path: string;
|
|
24
|
-
namespace: string;
|
|
38
|
+
namespace: string | null;
|
|
39
|
+
namespaceKey: string;
|
|
40
|
+
schemaName: string;
|
|
41
|
+
isSettings: boolean;
|
|
25
42
|
fromVersion: number;
|
|
26
43
|
toVersion: number;
|
|
27
44
|
}
|
|
28
45
|
|
|
29
46
|
export interface ExecuteMigrationResult {
|
|
30
|
-
namespace: string;
|
|
47
|
+
namespace: string | null;
|
|
31
48
|
didMigrate: boolean;
|
|
32
49
|
fromVersion: number;
|
|
33
50
|
toVersion: number;
|
|
34
51
|
}
|
|
35
52
|
|
|
36
|
-
|
|
53
|
+
const DEFAULT_DRIZZLE_PATH = "fragno-schema.ts";
|
|
54
|
+
const DEFAULT_PRISMA_PATH = "fragno.prisma";
|
|
55
|
+
|
|
56
|
+
const isSupportedDatabase = (value: string): value is SupportedDatabase =>
|
|
57
|
+
supportedDatabases.includes(value as SupportedDatabase);
|
|
58
|
+
|
|
59
|
+
export async function generateSchemaArtifacts<
|
|
37
60
|
// oxlint-disable-next-line no-explicit-any
|
|
38
61
|
const TDatabases extends FragnoDatabase<AnySchema, any>[],
|
|
39
|
-
>(
|
|
40
|
-
databases: TDatabases,
|
|
41
|
-
options?: {
|
|
42
|
-
path?: string;
|
|
43
|
-
toVersion?: number;
|
|
44
|
-
fromVersion?: number;
|
|
45
|
-
},
|
|
46
|
-
): Promise<GenerationEngineResult[]> {
|
|
62
|
+
>(databases: TDatabases, options?: GenerateSchemaOptions): Promise<GenerationEngineResult[]> {
|
|
47
63
|
if (databases.length === 0) {
|
|
48
64
|
throw new Error("No databases provided for schema generation");
|
|
49
65
|
}
|
|
50
66
|
|
|
51
67
|
const firstDb = databases[0];
|
|
52
68
|
const adapter = firstDb.adapter;
|
|
69
|
+
const format = options?.format ?? "sql";
|
|
53
70
|
|
|
54
|
-
|
|
55
|
-
if (adapter.createSchemaGenerator) {
|
|
71
|
+
if (format !== "sql") {
|
|
56
72
|
if (options?.toVersion !== undefined || options?.fromVersion !== undefined) {
|
|
57
|
-
|
|
58
|
-
|
|
73
|
+
throw new Error("--from and --to are only supported when generating SQL migrations.");
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const databaseType = adapter.adapterMetadata?.databaseType;
|
|
77
|
+
if (!databaseType || !isSupportedDatabase(databaseType)) {
|
|
78
|
+
throw new Error(
|
|
79
|
+
"Adapter does not expose databaseType metadata required for schema output generation.",
|
|
59
80
|
);
|
|
60
81
|
}
|
|
61
82
|
|
|
62
83
|
// Collect all schemas, de-duplicating by namespace.
|
|
63
84
|
// The internal fragment (settings schema) is always included first since all database
|
|
64
|
-
// fragments
|
|
65
|
-
const fragmentsMap = new Map<string, { schema: AnySchema; namespace: string }>();
|
|
85
|
+
// fragments share it via the adapter registry.
|
|
86
|
+
const fragmentsMap = new Map<string, { schema: AnySchema; namespace: string | null }>();
|
|
66
87
|
|
|
67
88
|
// Include internal fragment first with empty namespace (settings table has no prefix)
|
|
68
|
-
fragmentsMap.set(
|
|
89
|
+
fragmentsMap.set(internalSchema.name, {
|
|
69
90
|
schema: internalSchema,
|
|
70
|
-
namespace:
|
|
91
|
+
namespace: null,
|
|
71
92
|
});
|
|
72
93
|
|
|
73
94
|
// Add user fragments, de-duplicating by namespace
|
|
74
95
|
// Each FragnoDatabase has a unique namespace, so this prevents duplicate schema generation
|
|
75
96
|
for (const db of databases) {
|
|
76
|
-
|
|
77
|
-
|
|
97
|
+
const namespaceKey = db.namespace ?? db.schema.name;
|
|
98
|
+
if (!fragmentsMap.has(namespaceKey)) {
|
|
99
|
+
fragmentsMap.set(namespaceKey, {
|
|
78
100
|
schema: db.schema,
|
|
79
101
|
namespace: db.namespace,
|
|
80
102
|
});
|
|
81
103
|
}
|
|
82
104
|
}
|
|
83
105
|
|
|
84
|
-
const allFragments = Array.from(fragmentsMap.
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
106
|
+
const allFragments = Array.from(fragmentsMap.entries())
|
|
107
|
+
.map(([namespaceKey, fragment]) => ({
|
|
108
|
+
...fragment,
|
|
109
|
+
namespaceKey,
|
|
110
|
+
isInternal: fragment.schema === internalSchema,
|
|
111
|
+
}))
|
|
112
|
+
.sort((a, b) => {
|
|
113
|
+
if (a.isInternal) {
|
|
114
|
+
return -1;
|
|
115
|
+
}
|
|
116
|
+
if (b.isInternal) {
|
|
117
|
+
return 1;
|
|
118
|
+
}
|
|
119
|
+
return a.schema.name.localeCompare(b.schema.name);
|
|
120
|
+
})
|
|
121
|
+
.map(({ schema, namespace }) => ({ schema, namespace }));
|
|
122
|
+
const defaultPath = format === "drizzle" ? DEFAULT_DRIZZLE_PATH : DEFAULT_PRISMA_PATH;
|
|
123
|
+
const schema =
|
|
124
|
+
format === "drizzle"
|
|
125
|
+
? generateDrizzleSchema(allFragments, databaseType, {
|
|
126
|
+
namingStrategy: adapter.namingStrategy,
|
|
127
|
+
})
|
|
128
|
+
: generatePrismaSchema(allFragments, databaseType, {
|
|
129
|
+
sqliteStorageMode: adapter.adapterMetadata?.sqliteStorageMode,
|
|
130
|
+
namingStrategy: adapter.namingStrategy,
|
|
131
|
+
});
|
|
88
132
|
|
|
89
133
|
return [
|
|
90
134
|
{
|
|
91
|
-
|
|
135
|
+
schema,
|
|
136
|
+
path: options?.path ?? defaultPath,
|
|
92
137
|
namespace: firstDb.namespace,
|
|
93
138
|
},
|
|
94
139
|
];
|
|
95
140
|
}
|
|
96
141
|
|
|
97
|
-
// Otherwise, use migration engine for
|
|
142
|
+
// Otherwise, use migration engine for SQL migration generation.
|
|
98
143
|
if (!adapter.prepareMigrations) {
|
|
99
144
|
throw new Error(
|
|
100
|
-
"Adapter does not support migration
|
|
145
|
+
"Adapter does not support migration generation. Ensure your adapter implements prepareMigrations.",
|
|
101
146
|
);
|
|
102
147
|
}
|
|
103
148
|
|
|
@@ -109,18 +154,15 @@ export async function generateMigrationsOrSchema<
|
|
|
109
154
|
|
|
110
155
|
// Use the internal fragment for settings management
|
|
111
156
|
const internalFragment = instantiate(internalFragmentDef)
|
|
112
|
-
.withConfig({})
|
|
113
|
-
.withOptions({ databaseAdapter: adapter })
|
|
157
|
+
.withConfig({ registry: getRegistryForAdapterSync(adapter) })
|
|
158
|
+
.withOptions({ databaseAdapter: adapter, databaseNamespace: null })
|
|
114
159
|
.build();
|
|
115
160
|
|
|
116
|
-
const settingsSourceVersion = await getSchemaVersionFromDatabase(
|
|
117
|
-
internalFragment,
|
|
118
|
-
SETTINGS_NAMESPACE,
|
|
119
|
-
);
|
|
161
|
+
const settingsSourceVersion = await getSchemaVersionFromDatabase(internalFragment, "");
|
|
120
162
|
|
|
121
163
|
const generatedFiles: GenerationInternalResult[] = [];
|
|
122
164
|
|
|
123
|
-
//
|
|
165
|
+
// Internal fragment uses empty-string namespace: no table suffix, version key is ".schema_version"
|
|
124
166
|
const settingsPreparedMigrations = adapter.prepareMigrations(internalSchema, "");
|
|
125
167
|
const settingsTargetVersion = internalSchema.version;
|
|
126
168
|
|
|
@@ -134,7 +176,10 @@ export async function generateMigrationsOrSchema<
|
|
|
134
176
|
generatedFiles.push({
|
|
135
177
|
schema: settingsSql,
|
|
136
178
|
path: "settings-migration.sql", // Placeholder, will be renamed in post-processing
|
|
137
|
-
namespace:
|
|
179
|
+
namespace: null,
|
|
180
|
+
namespaceKey: SETTINGS_TABLE_NAME,
|
|
181
|
+
schemaName: internalSchema.name,
|
|
182
|
+
isSettings: true,
|
|
138
183
|
fromVersion: settingsSourceVersion,
|
|
139
184
|
toVersion: settingsTargetVersion,
|
|
140
185
|
});
|
|
@@ -147,8 +192,8 @@ export async function generateMigrationsOrSchema<
|
|
|
147
192
|
// Use migration engine
|
|
148
193
|
if (!dbAdapter.prepareMigrations) {
|
|
149
194
|
throw new Error(
|
|
150
|
-
`Adapter for ${db.namespace} does not support
|
|
151
|
-
`Ensure your adapter implements
|
|
195
|
+
`Adapter for ${db.namespace ?? db.schema.name} does not support migration generation. ` +
|
|
196
|
+
`Ensure your adapter implements prepareMigrations.`,
|
|
152
197
|
);
|
|
153
198
|
}
|
|
154
199
|
|
|
@@ -165,6 +210,9 @@ export async function generateMigrationsOrSchema<
|
|
|
165
210
|
schema: sql,
|
|
166
211
|
path: "schema.sql", // Placeholder, will be renamed in post-processing
|
|
167
212
|
namespace: db.namespace,
|
|
213
|
+
namespaceKey: db.namespace ?? db.schema.name,
|
|
214
|
+
schemaName: db.schema.name,
|
|
215
|
+
isSettings: false,
|
|
168
216
|
fromVersion: sourceVersion,
|
|
169
217
|
toVersion: targetVersion,
|
|
170
218
|
});
|
|
@@ -196,7 +244,7 @@ export async function executeMigrations<const TDatabases extends FragnoDatabase<
|
|
|
196
244
|
if (!adapter.prepareMigrations) {
|
|
197
245
|
throw new Error(
|
|
198
246
|
"Adapter does not support running migrations. The adapter only supports schema generation.\n" +
|
|
199
|
-
"Try using '
|
|
247
|
+
"Try using 'generateSchemaArtifacts' instead to generate schema files.",
|
|
200
248
|
);
|
|
201
249
|
}
|
|
202
250
|
|
|
@@ -224,7 +272,8 @@ export async function executeMigrations<const TDatabases extends FragnoDatabase<
|
|
|
224
272
|
|
|
225
273
|
const results: ExecuteMigrationResult[] = [];
|
|
226
274
|
const migrationsToExecute: Array<{
|
|
227
|
-
namespace: string;
|
|
275
|
+
namespace: string | null;
|
|
276
|
+
namespaceKey: string;
|
|
228
277
|
fromVersion: number;
|
|
229
278
|
toVersion: number;
|
|
230
279
|
execute: () => Promise<void>;
|
|
@@ -233,16 +282,13 @@ export async function executeMigrations<const TDatabases extends FragnoDatabase<
|
|
|
233
282
|
// 1. Prepare settings table migration
|
|
234
283
|
// Use the internal fragment for settings management
|
|
235
284
|
const internalFragment = instantiate(internalFragmentDef)
|
|
236
|
-
.withConfig({})
|
|
237
|
-
.withOptions({ databaseAdapter: adapter })
|
|
285
|
+
.withConfig({ registry: getRegistryForAdapterSync(adapter) })
|
|
286
|
+
.withOptions({ databaseAdapter: adapter, databaseNamespace: null })
|
|
238
287
|
.build();
|
|
239
288
|
|
|
240
|
-
const settingsSourceVersion = await getSchemaVersionFromDatabase(
|
|
241
|
-
internalFragment,
|
|
242
|
-
SETTINGS_NAMESPACE,
|
|
243
|
-
);
|
|
289
|
+
const settingsSourceVersion = await getSchemaVersionFromDatabase(internalFragment, "");
|
|
244
290
|
|
|
245
|
-
//
|
|
291
|
+
// Internal fragment uses empty-string namespace: no table suffix, version key is ".schema_version"
|
|
246
292
|
const settingsPreparedMigrations = adapter.prepareMigrations(internalSchema, "");
|
|
247
293
|
const settingsTargetVersion = internalSchema.version;
|
|
248
294
|
|
|
@@ -255,7 +301,8 @@ export async function executeMigrations<const TDatabases extends FragnoDatabase<
|
|
|
255
301
|
|
|
256
302
|
if (compiledMigration.statements.length > 0) {
|
|
257
303
|
migrationsToExecute.push({
|
|
258
|
-
namespace:
|
|
304
|
+
namespace: null,
|
|
305
|
+
namespaceKey: SETTINGS_TABLE_NAME,
|
|
259
306
|
fromVersion: settingsSourceVersion,
|
|
260
307
|
toVersion: settingsTargetVersion,
|
|
261
308
|
execute: () =>
|
|
@@ -267,11 +314,15 @@ export async function executeMigrations<const TDatabases extends FragnoDatabase<
|
|
|
267
314
|
}
|
|
268
315
|
|
|
269
316
|
// 2. Prepare fragment migrations (sorted alphabetically)
|
|
270
|
-
const
|
|
317
|
+
const getNamespaceKey = (db: FragnoDatabase<AnySchema>) => db.namespace ?? db.schema.name;
|
|
318
|
+
const sortedDatabases = [...databases].sort((a, b) =>
|
|
319
|
+
getNamespaceKey(a).localeCompare(getNamespaceKey(b)),
|
|
320
|
+
);
|
|
271
321
|
|
|
272
322
|
for (const fragnoDb of sortedDatabases) {
|
|
323
|
+
const namespaceKey = getNamespaceKey(fragnoDb);
|
|
273
324
|
const preparedMigrations = adapter.prepareMigrations(fragnoDb.schema, fragnoDb.namespace);
|
|
274
|
-
const currentVersion = await getSchemaVersionFromDatabase(internalFragment,
|
|
325
|
+
const currentVersion = await getSchemaVersionFromDatabase(internalFragment, namespaceKey);
|
|
275
326
|
const targetVersion = fragnoDb.schema.version;
|
|
276
327
|
|
|
277
328
|
if (currentVersion < targetVersion) {
|
|
@@ -282,6 +333,7 @@ export async function executeMigrations<const TDatabases extends FragnoDatabase<
|
|
|
282
333
|
if (compiledMigration.statements.length > 0) {
|
|
283
334
|
migrationsToExecute.push({
|
|
284
335
|
namespace: fragnoDb.namespace,
|
|
336
|
+
namespaceKey,
|
|
285
337
|
fromVersion: currentVersion,
|
|
286
338
|
toVersion: targetVersion,
|
|
287
339
|
execute: () =>
|
|
@@ -294,6 +346,7 @@ export async function executeMigrations<const TDatabases extends FragnoDatabase<
|
|
|
294
346
|
}
|
|
295
347
|
|
|
296
348
|
// 3. Execute all migrations in order
|
|
349
|
+
const executedNamespaceKeys = new Set<string>();
|
|
297
350
|
for (const migration of migrationsToExecute) {
|
|
298
351
|
await migration.execute();
|
|
299
352
|
results.push({
|
|
@@ -302,11 +355,13 @@ export async function executeMigrations<const TDatabases extends FragnoDatabase<
|
|
|
302
355
|
fromVersion: migration.fromVersion,
|
|
303
356
|
toVersion: migration.toVersion,
|
|
304
357
|
});
|
|
358
|
+
executedNamespaceKeys.add(migration.namespaceKey);
|
|
305
359
|
}
|
|
306
360
|
|
|
307
361
|
// 4. Add skipped migrations (already up-to-date)
|
|
308
362
|
for (const fragnoDb of databases) {
|
|
309
|
-
|
|
363
|
+
const namespaceKey = getNamespaceKey(fragnoDb);
|
|
364
|
+
if (!executedNamespaceKeys.has(namespaceKey)) {
|
|
310
365
|
results.push({
|
|
311
366
|
namespace: fragnoDb.namespace,
|
|
312
367
|
didMigrate: false,
|
|
@@ -322,7 +377,7 @@ export async function executeMigrations<const TDatabases extends FragnoDatabase<
|
|
|
322
377
|
/**
|
|
323
378
|
* Post-processes migration files to add ordering and standardize naming.
|
|
324
379
|
*
|
|
325
|
-
* Sorts files with settings namespace first, then alphabetically by namespace,
|
|
380
|
+
* Sorts files with settings namespace first, then alphabetically by namespace key,
|
|
326
381
|
* and assigns ordering numbers. Transforms filenames to format:
|
|
327
382
|
* `<date>_<n>_f<from>_t<to>_<namespace>.sql`
|
|
328
383
|
*
|
|
@@ -336,16 +391,15 @@ export function postProcessMigrationFilenames(
|
|
|
336
391
|
return [];
|
|
337
392
|
}
|
|
338
393
|
|
|
339
|
-
// Sort files: settings
|
|
394
|
+
// Sort files: settings first, then alphabetically by namespace key
|
|
340
395
|
const sortedFiles = [...files].sort((a, b) => {
|
|
341
|
-
|
|
342
|
-
if (a.namespace === "") {
|
|
396
|
+
if (a.isSettings) {
|
|
343
397
|
return -1;
|
|
344
398
|
}
|
|
345
|
-
if (b.
|
|
399
|
+
if (b.isSettings) {
|
|
346
400
|
return 1;
|
|
347
401
|
}
|
|
348
|
-
return a.
|
|
402
|
+
return a.namespaceKey.localeCompare(b.namespaceKey);
|
|
349
403
|
});
|
|
350
404
|
|
|
351
405
|
// Generate date prefix for filenames
|
|
@@ -361,10 +415,7 @@ export function postProcessMigrationFilenames(
|
|
|
361
415
|
const fromPadded = fromVersion.toString().padStart(3, "0");
|
|
362
416
|
const toPadded = toVersion.toString().padStart(3, "0");
|
|
363
417
|
|
|
364
|
-
|
|
365
|
-
// For other tables, use their namespace
|
|
366
|
-
const safeName =
|
|
367
|
-
file.namespace === "" ? "fragno_db_settings" : file.namespace.replace(/[^a-z0-9-]/gi, "_");
|
|
418
|
+
const safeName = file.namespaceKey.replace(/[^a-z0-9-]/gi, "_");
|
|
368
419
|
const newPath = `${date}_${orderNum}_f${fromPadded}_t${toPadded}_${safeName}.sql`;
|
|
369
420
|
|
|
370
421
|
return {
|
|
@@ -39,6 +39,19 @@ export interface ColumnInfo {
|
|
|
39
39
|
default?: { value: unknown } | { dbSpecial: "now" } | { runtime: "cuid" | "now" };
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
+
export interface SqliteRecreateTableInfo {
|
|
43
|
+
columns: ColumnInfo[];
|
|
44
|
+
copyColumns: SqliteCopyColumn[];
|
|
45
|
+
indexes: { name: string; columns: string[]; unique: boolean }[];
|
|
46
|
+
foreignKeys: ForeignKeyInfo[];
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export type SqliteCopyColumn = string | { from: string; to: string };
|
|
50
|
+
|
|
51
|
+
export interface SqliteAlterTableMetadata extends MigrationOperationMetadata {
|
|
52
|
+
recreateTable?: SqliteRecreateTableInfo;
|
|
53
|
+
}
|
|
54
|
+
|
|
42
55
|
export type MigrationOperation<
|
|
43
56
|
TMeta extends MigrationOperationMetadata = MigrationOperationMetadata,
|
|
44
57
|
> =
|
|
@@ -54,6 +67,7 @@ export type MigrationOperation<
|
|
|
54
67
|
type: "drop-foreign-key";
|
|
55
68
|
table: string;
|
|
56
69
|
name: string;
|
|
70
|
+
referencedTable: string;
|
|
57
71
|
} & { metadata?: TMeta })
|
|
58
72
|
| ({
|
|
59
73
|
type: "drop-index";
|
package/src/mod.ts
CHANGED
|
@@ -1,25 +1,37 @@
|
|
|
1
|
+
import type { FragnoInstantiatedFragment } from "@fragno-dev/core";
|
|
2
|
+
|
|
1
3
|
import type { DatabaseAdapter } from "./adapters/adapters";
|
|
2
|
-
import type { AnySchema } from "./schema/create";
|
|
3
|
-
import type { CursorResult } from "./query/cursor";
|
|
4
|
-
import { Cursor } from "./query/cursor";
|
|
5
|
-
import type { FragnoInstantiatedFragment, AnyFragnoInstantiatedFragment } from "@fragno-dev/core";
|
|
6
4
|
import type {
|
|
7
5
|
FragnoPublicConfigWithDatabase,
|
|
8
6
|
ImplicitDatabaseDependencies,
|
|
7
|
+
DatabaseHandlerContext,
|
|
9
8
|
} from "./db-fragment-definition-builder";
|
|
9
|
+
import { getSchemaVersionFromDatabase } from "./fragments/internal-fragment";
|
|
10
|
+
import { getInternalFragment } from "./internal/adapter-registry";
|
|
11
|
+
import type { CursorResult } from "./query/cursor";
|
|
12
|
+
import { Cursor } from "./query/cursor";
|
|
10
13
|
import {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
+
dbInterval,
|
|
15
|
+
dbNow,
|
|
16
|
+
type DbInterval,
|
|
17
|
+
type DbIntervalInput,
|
|
18
|
+
type DbNow,
|
|
19
|
+
} from "./query/db-now";
|
|
20
|
+
import type { AnySchema } from "./schema/create";
|
|
14
21
|
|
|
15
22
|
export type { DatabaseAdapter, CursorResult };
|
|
16
23
|
export { Cursor };
|
|
24
|
+
export { dbNow, dbInterval };
|
|
25
|
+
export type { DbNow, DbInterval, DbIntervalInput };
|
|
26
|
+
export { InMemoryAdapter, type InMemoryAdapterOptions } from "./adapters/in-memory";
|
|
27
|
+
export { internalSchema } from "./fragments/internal-fragment";
|
|
28
|
+
export { getInternalFragment } from "./internal/adapter-registry";
|
|
17
29
|
|
|
18
30
|
export const fragnoDatabaseFakeSymbol = "$fragno-database" as const;
|
|
19
31
|
export const fragnoDatabaseLibraryVersion = "0.1" as const;
|
|
20
32
|
|
|
21
33
|
export interface CreateFragnoDatabaseDefinitionOptions<T extends AnySchema> {
|
|
22
|
-
namespace: string;
|
|
34
|
+
namespace: string | null;
|
|
23
35
|
schema: T;
|
|
24
36
|
}
|
|
25
37
|
|
|
@@ -43,11 +55,15 @@ export function isFragnoDatabase(value: unknown): value is FragnoDatabase<AnySch
|
|
|
43
55
|
* Created from a FragnoDatabaseDefinition by calling .create(adapter).
|
|
44
56
|
*/
|
|
45
57
|
export class FragnoDatabase<const T extends AnySchema, TUOWConfig = void> {
|
|
46
|
-
#namespace: string;
|
|
58
|
+
#namespace: string | null;
|
|
47
59
|
#schema: T;
|
|
48
60
|
#adapter: DatabaseAdapter<TUOWConfig>;
|
|
49
61
|
|
|
50
|
-
constructor(options: {
|
|
62
|
+
constructor(options: {
|
|
63
|
+
namespace: string | null;
|
|
64
|
+
schema: T;
|
|
65
|
+
adapter: DatabaseAdapter<TUOWConfig>;
|
|
66
|
+
}) {
|
|
51
67
|
this.#namespace = options.namespace;
|
|
52
68
|
this.#schema = options.schema;
|
|
53
69
|
this.#adapter = options.adapter;
|
|
@@ -72,8 +88,10 @@ export class FragnoDatabase<const T extends AnySchema, TUOWConfig = void> {
|
|
|
72
88
|
|
|
73
89
|
export {
|
|
74
90
|
DatabaseFragmentDefinitionBuilder,
|
|
91
|
+
type DbRoundtripGuardConfig,
|
|
75
92
|
type FragnoPublicConfigWithDatabase,
|
|
76
93
|
type DatabaseFragmentContext,
|
|
94
|
+
type DatabaseServiceContext,
|
|
77
95
|
type DatabaseHandlerContext as DatabaseRequestContext,
|
|
78
96
|
type ImplicitDatabaseDependencies,
|
|
79
97
|
} from "./db-fragment-definition-builder";
|
|
@@ -107,8 +125,10 @@ export {
|
|
|
107
125
|
HandlerTxBuilder,
|
|
108
126
|
createServiceTxBuilder,
|
|
109
127
|
createHandlerTxBuilder,
|
|
128
|
+
serviceCalls,
|
|
110
129
|
type TxResult,
|
|
111
130
|
// Builder context types
|
|
131
|
+
type HandlerTxContext,
|
|
112
132
|
type ServiceBuilderMutateContext,
|
|
113
133
|
type HandlerBuilderMutateContext,
|
|
114
134
|
type BuilderTransformContextWithMutate,
|
|
@@ -121,25 +141,60 @@ export type { BoundServices } from "@fragno-dev/core";
|
|
|
121
141
|
|
|
122
142
|
export { internalFragmentDef } from "./fragments/internal-fragment";
|
|
123
143
|
export type { InternalFragmentInstance } from "./fragments/internal-fragment";
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
144
|
+
export type {
|
|
145
|
+
OutboxConfig,
|
|
146
|
+
OutboxEntry,
|
|
147
|
+
OutboxPayload,
|
|
148
|
+
OutboxMutation,
|
|
149
|
+
OutboxRefMap,
|
|
150
|
+
} from "./outbox/outbox";
|
|
151
|
+
|
|
152
|
+
export type {
|
|
153
|
+
HookContext,
|
|
154
|
+
HooksMap,
|
|
155
|
+
HookFn,
|
|
156
|
+
HookHandlerTx,
|
|
157
|
+
HookPayload,
|
|
158
|
+
TriggerHookOptions,
|
|
159
|
+
DurableHooksProcessingOptions,
|
|
160
|
+
StuckHookProcessingInfo,
|
|
161
|
+
StuckHookProcessingEvent,
|
|
162
|
+
StuckHookProcessingTimeoutMinutes,
|
|
163
|
+
} from "./hooks/hooks";
|
|
164
|
+
export { defineSyncCommands } from "./sync/commands";
|
|
165
|
+
export type {
|
|
166
|
+
DurableHookRecord,
|
|
167
|
+
DurableHookStatus,
|
|
168
|
+
DurableHooksAccessor,
|
|
169
|
+
DurableHooksService,
|
|
170
|
+
} from "./durable-hooks";
|
|
171
|
+
export { getDurableHooksService } from "./durable-hooks";
|
|
172
|
+
export type {
|
|
173
|
+
SubmitAppliedResponse,
|
|
174
|
+
SubmitConflictReason,
|
|
175
|
+
SubmitConflictResponse,
|
|
176
|
+
SubmitRequest,
|
|
177
|
+
SubmitResponse,
|
|
178
|
+
SyncCommandDefinition,
|
|
179
|
+
SyncCommandHandler,
|
|
180
|
+
SyncCommandRegistry,
|
|
181
|
+
SyncCommandTxFactory,
|
|
182
|
+
} from "./sync/types";
|
|
183
|
+
|
|
184
|
+
export type AnyFragnoInstantiatedDatabaseFragment<TSchema extends AnySchema = AnySchema> =
|
|
185
|
+
FragnoInstantiatedFragment<
|
|
186
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
187
|
+
any,
|
|
188
|
+
ImplicitDatabaseDependencies<TSchema>,
|
|
189
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
190
|
+
any,
|
|
191
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
192
|
+
any,
|
|
193
|
+
DatabaseHandlerContext,
|
|
194
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
195
|
+
any,
|
|
196
|
+
FragnoPublicConfigWithDatabase
|
|
197
|
+
>;
|
|
143
198
|
|
|
144
199
|
/**
|
|
145
200
|
* Helper function to run migrations for a database fragment.
|
|
@@ -163,9 +218,11 @@ export type AnyFragnoInstantiatedDatabaseFragment = FragnoInstantiatedFragment<
|
|
|
163
218
|
* await migrate(fragment);
|
|
164
219
|
* ```
|
|
165
220
|
*/
|
|
166
|
-
export async function migrate
|
|
167
|
-
|
|
168
|
-
|
|
221
|
+
export async function migrate<TSchema extends AnySchema>(
|
|
222
|
+
fragment: AnyFragnoInstantiatedDatabaseFragment<TSchema>,
|
|
223
|
+
): Promise<void> {
|
|
224
|
+
const { deps } = fragment.$internal;
|
|
225
|
+
const adapter = deps.databaseAdapter;
|
|
169
226
|
|
|
170
227
|
// Check if adapter supports prepareMigrations
|
|
171
228
|
if (!adapter.prepareMigrations) {
|
|
@@ -175,14 +232,10 @@ export async function migrate(fragment: AnyFragnoInstantiatedDatabaseFragment):
|
|
|
175
232
|
}
|
|
176
233
|
|
|
177
234
|
const schema = deps.schema;
|
|
178
|
-
const namespace = deps.namespace;
|
|
235
|
+
const namespace = deps.namespace ?? schema.name;
|
|
179
236
|
|
|
180
237
|
// Step 1: Ensure the internal fragment (settings table) is migrated first
|
|
181
|
-
const internalFragment =
|
|
182
|
-
|
|
183
|
-
if (!internalFragment) {
|
|
184
|
-
throw new Error("Internal fragment not found. Please ensure the internal fragment is linked.");
|
|
185
|
-
}
|
|
238
|
+
const internalFragment = getInternalFragment(adapter);
|
|
186
239
|
|
|
187
240
|
if (!(await adapter.isConnectionHealthy())) {
|
|
188
241
|
throw new Error(
|
|
@@ -192,7 +245,10 @@ export async function migrate(fragment: AnyFragnoInstantiatedDatabaseFragment):
|
|
|
192
245
|
|
|
193
246
|
const internalDeps = internalFragment.$internal.deps;
|
|
194
247
|
const internalSchema = internalDeps.schema;
|
|
195
|
-
|
|
248
|
+
// Internal fragment uses databaseNamespace: null (no table suffix).
|
|
249
|
+
// Version tracking uses empty string so the key is ".schema_version",
|
|
250
|
+
// which matches both the legacy format and how the internal fragment was designed.
|
|
251
|
+
const internalNamespace = internalDeps.namespace ?? "";
|
|
196
252
|
|
|
197
253
|
const internalCurrentVersion = await getSchemaVersionFromDatabase(
|
|
198
254
|
internalFragment,
|