@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,25 +1,48 @@
|
|
|
1
1
|
import { describe, it, expect, beforeAll, beforeEach, vi, afterEach } from "vitest";
|
|
2
|
+
|
|
2
3
|
import { DummyDriver, MysqlAdapter, PostgresAdapter, SqliteAdapter } from "kysely";
|
|
3
|
-
|
|
4
|
-
postProcessMigrationFilenames,
|
|
5
|
-
type GenerationInternalResult,
|
|
6
|
-
generateMigrationsOrSchema,
|
|
7
|
-
} from "./generation-engine";
|
|
8
|
-
import { KyselyAdapter } from "../adapters/kysely/kysely-adapter";
|
|
9
|
-
import { column, idColumn, schema, type AnySchema } from "../schema/create";
|
|
10
|
-
import { FragnoDatabase } from "../mod";
|
|
4
|
+
|
|
11
5
|
import {
|
|
12
6
|
MySQL2DriverConfig,
|
|
13
7
|
NodePostgresDriverConfig,
|
|
14
8
|
SQLocalDriverConfig,
|
|
15
9
|
} from "../adapters/generic-sql/driver-config";
|
|
10
|
+
import { SqlAdapter } from "../adapters/generic-sql/generic-sql-adapter";
|
|
11
|
+
import { FragnoDatabase } from "../mod";
|
|
12
|
+
import { column, idColumn, schema, type AnySchema } from "../schema/create";
|
|
13
|
+
import {
|
|
14
|
+
postProcessMigrationFilenames,
|
|
15
|
+
type GenerationInternalResult,
|
|
16
|
+
generateSchemaArtifacts,
|
|
17
|
+
} from "./generation-engine";
|
|
16
18
|
|
|
17
|
-
|
|
19
|
+
const buildFile = (
|
|
20
|
+
overrides: Partial<GenerationInternalResult> &
|
|
21
|
+
Pick<GenerationInternalResult, "schema" | "namespace" | "fromVersion" | "toVersion">,
|
|
22
|
+
): GenerationInternalResult => {
|
|
23
|
+
const namespace = overrides.namespace ?? null;
|
|
24
|
+
const schemaName = overrides.schemaName ?? "test";
|
|
25
|
+
const namespaceKey = overrides.namespaceKey ?? namespace ?? schemaName;
|
|
26
|
+
const isSettings = overrides.isSettings ?? false;
|
|
27
|
+
|
|
28
|
+
return {
|
|
29
|
+
schema: overrides.schema,
|
|
30
|
+
path: overrides.path ?? "placeholder.sql",
|
|
31
|
+
namespace,
|
|
32
|
+
namespaceKey,
|
|
33
|
+
schemaName,
|
|
34
|
+
isSettings,
|
|
35
|
+
fromVersion: overrides.fromVersion,
|
|
36
|
+
toVersion: overrides.toVersion,
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
describe("generateSchemaArtifacts - sql", () => {
|
|
18
41
|
const mockDate = new Date("2025-10-24T12:00:00Z");
|
|
19
|
-
let adapter:
|
|
42
|
+
let adapter: SqlAdapter;
|
|
20
43
|
|
|
21
44
|
beforeAll(() => {
|
|
22
|
-
adapter = new
|
|
45
|
+
adapter = new SqlAdapter({
|
|
23
46
|
dialect: {
|
|
24
47
|
createAdapter: () => new PostgresAdapter(),
|
|
25
48
|
createDriver: () => new DummyDriver(),
|
|
@@ -48,7 +71,7 @@ describe("generateMigrationsOrSchema - kysely", () => {
|
|
|
48
71
|
});
|
|
49
72
|
|
|
50
73
|
it("should generate migration for single database from version 0", async () => {
|
|
51
|
-
const testSchema: AnySchema = schema((s) => {
|
|
74
|
+
const testSchema: AnySchema = schema("test", (s) => {
|
|
52
75
|
return s.addTable("users", (t) => {
|
|
53
76
|
return t.addColumn("id", idColumn()).addColumn("name", column("string"));
|
|
54
77
|
});
|
|
@@ -60,10 +83,10 @@ describe("generateMigrationsOrSchema - kysely", () => {
|
|
|
60
83
|
adapter,
|
|
61
84
|
});
|
|
62
85
|
|
|
63
|
-
const results = await
|
|
86
|
+
const results = await generateSchemaArtifacts([fragnoDb]);
|
|
64
87
|
|
|
65
88
|
expect(results).toHaveLength(2); // Settings + test-db
|
|
66
|
-
expect(results[0].namespace).
|
|
89
|
+
expect(results[0].namespace).toBeNull();
|
|
67
90
|
expect(results[0].path).toMatch(/^20251024_001_f000_t00\d_fragno_db_settings.sql$/);
|
|
68
91
|
expect(results[0].schema).toContain("create table");
|
|
69
92
|
expect(results[0].schema).toContain("fragno_db_settings");
|
|
@@ -71,23 +94,23 @@ describe("generateMigrationsOrSchema - kysely", () => {
|
|
|
71
94
|
expect(results[1].namespace).toBe("test-db");
|
|
72
95
|
expect(results[1].path).toBe("20251024_002_f000_t001_test-db.sql");
|
|
73
96
|
expect(results[1].schema).toContain("create table");
|
|
74
|
-
expect(results[1].schema).toContain("
|
|
97
|
+
expect(results[1].schema).toContain('"test-db"."users"');
|
|
75
98
|
});
|
|
76
99
|
|
|
77
100
|
it("should generate migrations for multiple databases in alphabetical order", async () => {
|
|
78
|
-
const schema1: AnySchema = schema((s) => {
|
|
101
|
+
const schema1: AnySchema = schema("schema1", (s) => {
|
|
79
102
|
return s.addTable("users", (t) => {
|
|
80
103
|
return t.addColumn("id", idColumn()).addColumn("name", column("string"));
|
|
81
104
|
});
|
|
82
105
|
});
|
|
83
106
|
|
|
84
|
-
const schema2: AnySchema = schema((s) => {
|
|
107
|
+
const schema2: AnySchema = schema("schema2", (s) => {
|
|
85
108
|
return s.addTable("posts", (t) => {
|
|
86
109
|
return t.addColumn("id", idColumn()).addColumn("title", column("string"));
|
|
87
110
|
});
|
|
88
111
|
});
|
|
89
112
|
|
|
90
|
-
const schema3: AnySchema = schema((s) => {
|
|
113
|
+
const schema3: AnySchema = schema("schema3", (s) => {
|
|
91
114
|
return s.addTable("comments", (t) => {
|
|
92
115
|
return t.addColumn("id", idColumn()).addColumn("text", column("string"));
|
|
93
116
|
});
|
|
@@ -111,27 +134,27 @@ describe("generateMigrationsOrSchema - kysely", () => {
|
|
|
111
134
|
adapter,
|
|
112
135
|
});
|
|
113
136
|
|
|
114
|
-
const results = await
|
|
137
|
+
const results = await generateSchemaArtifacts([fragnoDb1, fragnoDb2, fragnoDb3]);
|
|
115
138
|
|
|
116
139
|
expect(results).toHaveLength(4); // Settings + 3 databases
|
|
117
|
-
expect(results[0].namespace).
|
|
140
|
+
expect(results[0].namespace).toBeNull();
|
|
118
141
|
expect(results[0].path).toMatch(/^20251024_001_f000_t00\d_fragno_db_settings.sql$/);
|
|
119
142
|
|
|
120
143
|
expect(results[1].namespace).toBe("apple-db");
|
|
121
144
|
expect(results[1].path).toBe("20251024_002_f000_t001_apple-db.sql");
|
|
122
|
-
expect(results[1].schema).toContain("
|
|
145
|
+
expect(results[1].schema).toContain('"apple-db"."posts"');
|
|
123
146
|
|
|
124
147
|
expect(results[2].namespace).toBe("mango-db");
|
|
125
148
|
expect(results[2].path).toBe("20251024_003_f000_t001_mango-db.sql");
|
|
126
|
-
expect(results[2].schema).toContain("
|
|
149
|
+
expect(results[2].schema).toContain('"mango-db"."comments"');
|
|
127
150
|
|
|
128
151
|
expect(results[3].namespace).toBe("zebra-db");
|
|
129
152
|
expect(results[3].path).toBe("20251024_004_f000_t001_zebra-db.sql");
|
|
130
|
-
expect(results[3].schema).toContain("
|
|
153
|
+
expect(results[3].schema).toContain('"zebra-db"."users"');
|
|
131
154
|
});
|
|
132
155
|
|
|
133
156
|
it("should handle existing settings version and generate both settings and fragment migrations", async () => {
|
|
134
|
-
const testSchema: AnySchema = schema((s) => {
|
|
157
|
+
const testSchema: AnySchema = schema("test", (s) => {
|
|
135
158
|
return s
|
|
136
159
|
.addTable("users", (t) => {
|
|
137
160
|
return t.addColumn("id", idColumn()).addColumn("name", column("string"));
|
|
@@ -150,12 +173,12 @@ describe("generateMigrationsOrSchema - kysely", () => {
|
|
|
150
173
|
adapter,
|
|
151
174
|
});
|
|
152
175
|
|
|
153
|
-
const results = await
|
|
176
|
+
const results = await generateSchemaArtifacts([fragnoDb]);
|
|
154
177
|
|
|
155
178
|
// Settings table already at version 1, so no settings migration needed
|
|
156
179
|
// But fragment migration is still generated
|
|
157
180
|
expect(results).toHaveLength(2);
|
|
158
|
-
expect(results[0].namespace).
|
|
181
|
+
expect(results[0].namespace).toBeNull();
|
|
159
182
|
expect(results[1].namespace).toBe("test-db");
|
|
160
183
|
expect(results[1].path).toBe("20251024_002_f000_t002_test-db.sql");
|
|
161
184
|
expect(results[1].schema).toContain("create table");
|
|
@@ -163,7 +186,7 @@ describe("generateMigrationsOrSchema - kysely", () => {
|
|
|
163
186
|
});
|
|
164
187
|
|
|
165
188
|
it("should generate settings migration even with no fragment changes", async () => {
|
|
166
|
-
const testSchema: AnySchema = schema((s) => {
|
|
189
|
+
const testSchema: AnySchema = schema("test", (s) => {
|
|
167
190
|
return s.addTable("users", (t) => {
|
|
168
191
|
return t.addColumn("id", idColumn()).addColumn("name", column("string"));
|
|
169
192
|
});
|
|
@@ -176,24 +199,26 @@ describe("generateMigrationsOrSchema - kysely", () => {
|
|
|
176
199
|
});
|
|
177
200
|
|
|
178
201
|
// Generate with toVersion = 0, fromVersion = 0 (no fragment changes)
|
|
179
|
-
const results = await
|
|
202
|
+
const results = await generateSchemaArtifacts([fragnoDb], {
|
|
180
203
|
toVersion: 0,
|
|
181
204
|
fromVersion: 0,
|
|
182
205
|
});
|
|
183
206
|
|
|
184
|
-
// Settings migration is generated,
|
|
185
|
-
expect(results).toHaveLength(
|
|
186
|
-
expect(results[0].namespace).
|
|
207
|
+
// Settings migration is generated, and fragment migration creates schema (toVersion=0)
|
|
208
|
+
expect(results).toHaveLength(2);
|
|
209
|
+
expect(results[0].namespace).toBeNull();
|
|
210
|
+
expect(results[1].namespace).toBe("test-db");
|
|
211
|
+
expect(results[1].schema).toContain('CREATE SCHEMA IF NOT EXISTS "test-db"');
|
|
187
212
|
});
|
|
188
213
|
|
|
189
214
|
it("should throw error when no databases provided", async () => {
|
|
190
|
-
await expect(
|
|
215
|
+
await expect(generateSchemaArtifacts([])).rejects.toThrow(
|
|
191
216
|
"No databases provided for schema generation",
|
|
192
217
|
);
|
|
193
218
|
});
|
|
194
219
|
|
|
195
220
|
it("should throw error when database connection is unhealthy", async () => {
|
|
196
|
-
const testSchema: AnySchema = schema((s) => {
|
|
221
|
+
const testSchema: AnySchema = schema("test", (s) => {
|
|
197
222
|
return s.addTable("users", (t) => {
|
|
198
223
|
return t.addColumn("id", idColumn()).addColumn("name", column("string"));
|
|
199
224
|
});
|
|
@@ -208,13 +233,13 @@ describe("generateMigrationsOrSchema - kysely", () => {
|
|
|
208
233
|
adapter,
|
|
209
234
|
});
|
|
210
235
|
|
|
211
|
-
await expect(
|
|
236
|
+
await expect(generateSchemaArtifacts([fragnoDb])).rejects.toThrow(
|
|
212
237
|
"Database connection is not healthy",
|
|
213
238
|
);
|
|
214
239
|
});
|
|
215
240
|
|
|
216
241
|
it("should generate SQL with correct version tracking in settings", async () => {
|
|
217
|
-
const testSchema: AnySchema = schema((s) => {
|
|
242
|
+
const testSchema: AnySchema = schema("test", (s) => {
|
|
218
243
|
return s.addTable("users", (t) => {
|
|
219
244
|
return t.addColumn("id", idColumn()).addColumn("name", column("string"));
|
|
220
245
|
});
|
|
@@ -226,7 +251,7 @@ describe("generateMigrationsOrSchema - kysely", () => {
|
|
|
226
251
|
adapter,
|
|
227
252
|
});
|
|
228
253
|
|
|
229
|
-
const results = await
|
|
254
|
+
const results = await generateSchemaArtifacts([fragnoDb]);
|
|
230
255
|
|
|
231
256
|
// Check settings migration includes version tracking
|
|
232
257
|
expect(results[0].schema).toContain("fragno_db_settings");
|
|
@@ -239,7 +264,7 @@ describe("generateMigrationsOrSchema - kysely", () => {
|
|
|
239
264
|
});
|
|
240
265
|
|
|
241
266
|
it("should generate INSERT for version 0->N and UPDATE for version N->M", async () => {
|
|
242
|
-
const testSchema: AnySchema = schema((s) => {
|
|
267
|
+
const testSchema: AnySchema = schema("test", (s) => {
|
|
243
268
|
return s
|
|
244
269
|
.addTable("users", (t) => {
|
|
245
270
|
return t.addColumn("id", idColumn()).addColumn("name", column("string"));
|
|
@@ -257,7 +282,7 @@ describe("generateMigrationsOrSchema - kysely", () => {
|
|
|
257
282
|
|
|
258
283
|
// First migration: 0 -> 1 (should use INSERT)
|
|
259
284
|
vi.spyOn(adapter, "getSchemaVersion").mockResolvedValueOnce(undefined);
|
|
260
|
-
const resultsV1 = await
|
|
285
|
+
const resultsV1 = await generateSchemaArtifacts([fragnoDb], {
|
|
261
286
|
fromVersion: 0,
|
|
262
287
|
toVersion: 1,
|
|
263
288
|
});
|
|
@@ -268,14 +293,16 @@ describe("generateMigrationsOrSchema - kysely", () => {
|
|
|
268
293
|
expect(resultsV1[1].schema).toContain("test-db.schema_version");
|
|
269
294
|
expect(resultsV1[1].schema).toContain("'1'");
|
|
270
295
|
expect(resultsV1[1].schema).toMatchInlineSnapshot(`
|
|
271
|
-
"
|
|
296
|
+
"CREATE SCHEMA IF NOT EXISTS "test-db";
|
|
297
|
+
|
|
298
|
+
create table "test-db"."users" ("id" varchar(128) not null unique, "name" text not null, "_internalId" bigserial not null primary key, "_version" integer default 0 not null);
|
|
272
299
|
|
|
273
300
|
insert into "fragno_db_settings" ("id", "key", "value") values ('6_U2SCfiaNG9VyYmQ_JwzQ', 'test-db.schema_version', '1');"
|
|
274
301
|
`);
|
|
275
302
|
|
|
276
303
|
// Second migration: 1 -> 2 (should use UPDATE)
|
|
277
304
|
vi.spyOn(adapter, "getSchemaVersion").mockResolvedValueOnce("1");
|
|
278
|
-
const resultsV2 = await
|
|
305
|
+
const resultsV2 = await generateSchemaArtifacts([fragnoDb], {
|
|
279
306
|
fromVersion: 1,
|
|
280
307
|
toVersion: 2,
|
|
281
308
|
});
|
|
@@ -287,14 +314,16 @@ describe("generateMigrationsOrSchema - kysely", () => {
|
|
|
287
314
|
expect(resultsV2[1].schema).toContain("test-db.schema_version");
|
|
288
315
|
expect(resultsV2[1].schema).toContain("'2'");
|
|
289
316
|
expect(resultsV2[1].schema).toMatchInlineSnapshot(`
|
|
290
|
-
"
|
|
317
|
+
"CREATE SCHEMA IF NOT EXISTS "test-db";
|
|
318
|
+
|
|
319
|
+
alter table "test-db"."users" add column "email" text;
|
|
291
320
|
|
|
292
321
|
update "fragno_db_settings" set "value" = '2' where "key" = 'test-db.schema_version';"
|
|
293
322
|
`);
|
|
294
323
|
});
|
|
295
324
|
|
|
296
325
|
it("should include MySQL-specific foreign key checks in generated SQL", async () => {
|
|
297
|
-
const mysqlAdapter = new
|
|
326
|
+
const mysqlAdapter = new SqlAdapter({
|
|
298
327
|
dialect: {
|
|
299
328
|
createAdapter: () => new MysqlAdapter(),
|
|
300
329
|
createDriver: () => new DummyDriver(),
|
|
@@ -311,7 +340,7 @@ describe("generateMigrationsOrSchema - kysely", () => {
|
|
|
311
340
|
vi.spyOn(mysqlAdapter, "isConnectionHealthy").mockResolvedValue(true);
|
|
312
341
|
vi.spyOn(mysqlAdapter, "getSchemaVersion").mockResolvedValue(undefined);
|
|
313
342
|
|
|
314
|
-
const testSchema: AnySchema = schema((s) => {
|
|
343
|
+
const testSchema: AnySchema = schema("test", (s) => {
|
|
315
344
|
return s.addTable("users", (t) => {
|
|
316
345
|
return t.addColumn("id", idColumn()).addColumn("name", column("string"));
|
|
317
346
|
});
|
|
@@ -323,7 +352,7 @@ describe("generateMigrationsOrSchema - kysely", () => {
|
|
|
323
352
|
adapter: mysqlAdapter,
|
|
324
353
|
});
|
|
325
354
|
|
|
326
|
-
const results = await
|
|
355
|
+
const results = await generateSchemaArtifacts([fragnoDb]);
|
|
327
356
|
|
|
328
357
|
expect(results).toHaveLength(2);
|
|
329
358
|
// Check that MySQL foreign key checks are included
|
|
@@ -339,7 +368,7 @@ describe("generateMigrationsOrSchema - kysely", () => {
|
|
|
339
368
|
});
|
|
340
369
|
|
|
341
370
|
it("should include SQLite-specific pragma in generated SQL", async () => {
|
|
342
|
-
const sqliteAdapter = new
|
|
371
|
+
const sqliteAdapter = new SqlAdapter({
|
|
343
372
|
dialect: {
|
|
344
373
|
createAdapter: () => new SqliteAdapter(),
|
|
345
374
|
createDriver: () => new DummyDriver(),
|
|
@@ -356,7 +385,7 @@ describe("generateMigrationsOrSchema - kysely", () => {
|
|
|
356
385
|
vi.spyOn(sqliteAdapter, "isConnectionHealthy").mockResolvedValue(true);
|
|
357
386
|
vi.spyOn(sqliteAdapter, "getSchemaVersion").mockResolvedValue(undefined);
|
|
358
387
|
|
|
359
|
-
const testSchema: AnySchema = schema((s) => {
|
|
388
|
+
const testSchema: AnySchema = schema("test", (s) => {
|
|
360
389
|
return s.addTable("users", (t) => {
|
|
361
390
|
return t.addColumn("id", idColumn()).addColumn("name", column("string"));
|
|
362
391
|
});
|
|
@@ -368,7 +397,7 @@ describe("generateMigrationsOrSchema - kysely", () => {
|
|
|
368
397
|
adapter: sqliteAdapter,
|
|
369
398
|
});
|
|
370
399
|
|
|
371
|
-
const results = await
|
|
400
|
+
const results = await generateSchemaArtifacts([fragnoDb]);
|
|
372
401
|
|
|
373
402
|
expect(results).toHaveLength(2);
|
|
374
403
|
// Check that SQLite pragma is included
|
|
@@ -381,6 +410,166 @@ describe("generateMigrationsOrSchema - kysely", () => {
|
|
|
381
410
|
});
|
|
382
411
|
});
|
|
383
412
|
|
|
413
|
+
describe("generateSchemaArtifacts - schema outputs", () => {
|
|
414
|
+
it("should generate drizzle schema without requiring a healthy connection", async () => {
|
|
415
|
+
const adapter = new SqlAdapter({
|
|
416
|
+
dialect: {
|
|
417
|
+
createAdapter: () => new PostgresAdapter(),
|
|
418
|
+
createDriver: () => new DummyDriver(),
|
|
419
|
+
createQueryCompiler: () => ({
|
|
420
|
+
compileQuery: () => ({
|
|
421
|
+
sql: "",
|
|
422
|
+
parameters: [],
|
|
423
|
+
}),
|
|
424
|
+
}),
|
|
425
|
+
},
|
|
426
|
+
driverConfig: new NodePostgresDriverConfig(),
|
|
427
|
+
});
|
|
428
|
+
|
|
429
|
+
const testSchema: AnySchema = schema("test", (s) => {
|
|
430
|
+
return s.addTable("users", (t) => {
|
|
431
|
+
return t.addColumn("id", idColumn()).addColumn("name", column("string"));
|
|
432
|
+
});
|
|
433
|
+
});
|
|
434
|
+
|
|
435
|
+
const fragnoDb = new FragnoDatabase({
|
|
436
|
+
namespace: "drizzle-db",
|
|
437
|
+
schema: testSchema,
|
|
438
|
+
adapter,
|
|
439
|
+
});
|
|
440
|
+
|
|
441
|
+
const healthSpy = vi.spyOn(adapter, "isConnectionHealthy").mockResolvedValue(false);
|
|
442
|
+
const [result] = await generateSchemaArtifacts([fragnoDb], { format: "drizzle" });
|
|
443
|
+
|
|
444
|
+
expect(result.path).toBe("fragno-schema.ts");
|
|
445
|
+
expect(result.schema).toContain("schemaVersion");
|
|
446
|
+
expect(healthSpy).not.toHaveBeenCalled();
|
|
447
|
+
});
|
|
448
|
+
|
|
449
|
+
it("should order drizzle schema fragments deterministically by schema name", async () => {
|
|
450
|
+
const adapter = new SqlAdapter({
|
|
451
|
+
dialect: {
|
|
452
|
+
createAdapter: () => new PostgresAdapter(),
|
|
453
|
+
createDriver: () => new DummyDriver(),
|
|
454
|
+
createQueryCompiler: () => ({
|
|
455
|
+
compileQuery: () => ({
|
|
456
|
+
sql: "",
|
|
457
|
+
parameters: [],
|
|
458
|
+
}),
|
|
459
|
+
}),
|
|
460
|
+
},
|
|
461
|
+
driverConfig: new NodePostgresDriverConfig(),
|
|
462
|
+
});
|
|
463
|
+
|
|
464
|
+
const schemaAlpha: AnySchema = schema("alpha", (s) => {
|
|
465
|
+
return s.addTable("alpha_table", (t) => {
|
|
466
|
+
return t.addColumn("id", idColumn()).addColumn("name", column("string"));
|
|
467
|
+
});
|
|
468
|
+
});
|
|
469
|
+
|
|
470
|
+
const schemaBeta: AnySchema = schema("beta", (s) => {
|
|
471
|
+
return s.addTable("beta_table", (t) => {
|
|
472
|
+
return t.addColumn("id", idColumn()).addColumn("title", column("string"));
|
|
473
|
+
});
|
|
474
|
+
});
|
|
475
|
+
|
|
476
|
+
const fragnoDbBeta = new FragnoDatabase({
|
|
477
|
+
namespace: "alpha",
|
|
478
|
+
schema: schemaBeta,
|
|
479
|
+
adapter,
|
|
480
|
+
});
|
|
481
|
+
|
|
482
|
+
const fragnoDbAlpha = new FragnoDatabase({
|
|
483
|
+
namespace: "zulu",
|
|
484
|
+
schema: schemaAlpha,
|
|
485
|
+
adapter,
|
|
486
|
+
});
|
|
487
|
+
|
|
488
|
+
const [result] = await generateSchemaArtifacts([fragnoDbBeta, fragnoDbAlpha], {
|
|
489
|
+
format: "drizzle",
|
|
490
|
+
});
|
|
491
|
+
|
|
492
|
+
const schemaOutput = result.schema;
|
|
493
|
+
const internalIndex = schemaOutput.indexOf("Fragment: (none)");
|
|
494
|
+
const alphaIndex = schemaOutput.indexOf("Fragment: zulu");
|
|
495
|
+
const betaIndex = schemaOutput.indexOf("Fragment: alpha");
|
|
496
|
+
|
|
497
|
+
expect(internalIndex).toBeGreaterThanOrEqual(0);
|
|
498
|
+
expect(alphaIndex).toBeGreaterThanOrEqual(0);
|
|
499
|
+
expect(betaIndex).toBeGreaterThanOrEqual(0);
|
|
500
|
+
expect(internalIndex).toBeLessThan(alphaIndex);
|
|
501
|
+
expect(alphaIndex).toBeLessThan(betaIndex);
|
|
502
|
+
});
|
|
503
|
+
|
|
504
|
+
it("should reject from/to versions for prisma output", async () => {
|
|
505
|
+
const adapter = new SqlAdapter({
|
|
506
|
+
dialect: {
|
|
507
|
+
createAdapter: () => new SqliteAdapter(),
|
|
508
|
+
createDriver: () => new DummyDriver(),
|
|
509
|
+
createQueryCompiler: () => ({
|
|
510
|
+
compileQuery: () => ({
|
|
511
|
+
sql: "",
|
|
512
|
+
parameters: [],
|
|
513
|
+
}),
|
|
514
|
+
}),
|
|
515
|
+
},
|
|
516
|
+
driverConfig: new SQLocalDriverConfig(),
|
|
517
|
+
sqliteProfile: "prisma",
|
|
518
|
+
});
|
|
519
|
+
|
|
520
|
+
const testSchema: AnySchema = schema("test", (s) => {
|
|
521
|
+
return s.addTable("events", (t) => {
|
|
522
|
+
return t.addColumn("id", idColumn()).addColumn("createdAt", column("timestamp"));
|
|
523
|
+
});
|
|
524
|
+
});
|
|
525
|
+
|
|
526
|
+
const fragnoDb = new FragnoDatabase({
|
|
527
|
+
namespace: "prisma-db",
|
|
528
|
+
schema: testSchema,
|
|
529
|
+
adapter,
|
|
530
|
+
});
|
|
531
|
+
|
|
532
|
+
await expect(
|
|
533
|
+
generateSchemaArtifacts([fragnoDb], { format: "prisma", fromVersion: 0 }),
|
|
534
|
+
).rejects.toThrow("--from and --to are only supported when generating SQL migrations.");
|
|
535
|
+
});
|
|
536
|
+
|
|
537
|
+
it("should honor sqlite prisma profile for schema output", async () => {
|
|
538
|
+
const adapter = new SqlAdapter({
|
|
539
|
+
dialect: {
|
|
540
|
+
createAdapter: () => new SqliteAdapter(),
|
|
541
|
+
createDriver: () => new DummyDriver(),
|
|
542
|
+
createQueryCompiler: () => ({
|
|
543
|
+
compileQuery: () => ({
|
|
544
|
+
sql: "",
|
|
545
|
+
parameters: [],
|
|
546
|
+
}),
|
|
547
|
+
}),
|
|
548
|
+
},
|
|
549
|
+
driverConfig: new SQLocalDriverConfig(),
|
|
550
|
+
sqliteProfile: "prisma",
|
|
551
|
+
});
|
|
552
|
+
|
|
553
|
+
const testSchema: AnySchema = schema("test", (s) => {
|
|
554
|
+
return s.addTable("events", (t) => {
|
|
555
|
+
return t.addColumn("id", idColumn()).addColumn("createdAt", column("timestamp"));
|
|
556
|
+
});
|
|
557
|
+
});
|
|
558
|
+
|
|
559
|
+
const fragnoDb = new FragnoDatabase({
|
|
560
|
+
namespace: "prisma-db",
|
|
561
|
+
schema: testSchema,
|
|
562
|
+
adapter,
|
|
563
|
+
});
|
|
564
|
+
|
|
565
|
+
const [result] = await generateSchemaArtifacts([fragnoDb], { format: "prisma" });
|
|
566
|
+
|
|
567
|
+
expect(result.path).toBe("fragno.prisma");
|
|
568
|
+
expect(result.schema).toContain("model Events_prisma_db");
|
|
569
|
+
expect(result.schema).toContain("DateTime");
|
|
570
|
+
});
|
|
571
|
+
});
|
|
572
|
+
|
|
384
573
|
describe("postProcessMigrationFilenames", () => {
|
|
385
574
|
const mockDate = new Date("2025-10-24T12:00:00Z");
|
|
386
575
|
|
|
@@ -400,59 +589,56 @@ describe("postProcessMigrationFilenames", () => {
|
|
|
400
589
|
|
|
401
590
|
it("should order settings namespace first", () => {
|
|
402
591
|
const files: GenerationInternalResult[] = [
|
|
403
|
-
{
|
|
592
|
+
buildFile({
|
|
404
593
|
schema: "schema1",
|
|
405
|
-
path: "placeholder.sql",
|
|
406
594
|
namespace: "fragno-db-comment-db",
|
|
407
595
|
fromVersion: 0,
|
|
408
596
|
toVersion: 3,
|
|
409
|
-
},
|
|
410
|
-
{
|
|
597
|
+
}),
|
|
598
|
+
buildFile({
|
|
411
599
|
schema: "schema2",
|
|
412
|
-
|
|
413
|
-
|
|
600
|
+
namespace: null,
|
|
601
|
+
namespaceKey: "fragno_db_settings",
|
|
602
|
+
schemaName: "fragno_internal",
|
|
603
|
+
isSettings: true,
|
|
414
604
|
fromVersion: 0,
|
|
415
605
|
toVersion: 1,
|
|
416
|
-
},
|
|
417
|
-
{
|
|
606
|
+
}),
|
|
607
|
+
buildFile({
|
|
418
608
|
schema: "schema3",
|
|
419
|
-
path: "placeholder.sql",
|
|
420
609
|
namespace: "fragno-db-rating-db",
|
|
421
610
|
fromVersion: 0,
|
|
422
611
|
toVersion: 2,
|
|
423
|
-
},
|
|
612
|
+
}),
|
|
424
613
|
];
|
|
425
614
|
|
|
426
615
|
const result = postProcessMigrationFilenames(files);
|
|
427
616
|
|
|
428
617
|
expect(result).toHaveLength(3);
|
|
429
|
-
expect(result[0].namespace).
|
|
618
|
+
expect(result[0].namespace).toBeNull();
|
|
430
619
|
expect(result[0].path).toBe("20251024_001_f000_t001_fragno_db_settings.sql");
|
|
431
620
|
});
|
|
432
621
|
|
|
433
622
|
it("should sort non-settings namespaces alphabetically", () => {
|
|
434
623
|
const files: GenerationInternalResult[] = [
|
|
435
|
-
{
|
|
624
|
+
buildFile({
|
|
436
625
|
schema: "schema1",
|
|
437
|
-
path: "placeholder.sql",
|
|
438
626
|
namespace: "zebra-db",
|
|
439
627
|
fromVersion: 0,
|
|
440
628
|
toVersion: 1,
|
|
441
|
-
},
|
|
442
|
-
{
|
|
629
|
+
}),
|
|
630
|
+
buildFile({
|
|
443
631
|
schema: "schema2",
|
|
444
|
-
path: "placeholder.sql",
|
|
445
632
|
namespace: "apple-db",
|
|
446
633
|
fromVersion: 0,
|
|
447
634
|
toVersion: 1,
|
|
448
|
-
},
|
|
449
|
-
{
|
|
635
|
+
}),
|
|
636
|
+
buildFile({
|
|
450
637
|
schema: "schema3",
|
|
451
|
-
path: "placeholder.sql",
|
|
452
638
|
namespace: "mango-db",
|
|
453
639
|
fromVersion: 0,
|
|
454
640
|
toVersion: 1,
|
|
455
|
-
},
|
|
641
|
+
}),
|
|
456
642
|
];
|
|
457
643
|
|
|
458
644
|
const result = postProcessMigrationFilenames(files);
|
|
@@ -465,20 +651,21 @@ describe("postProcessMigrationFilenames", () => {
|
|
|
465
651
|
|
|
466
652
|
it("should format filename with correct ordering and version numbers", () => {
|
|
467
653
|
const files: GenerationInternalResult[] = [
|
|
468
|
-
{
|
|
654
|
+
buildFile({
|
|
469
655
|
schema: "CREATE TABLE users;",
|
|
470
|
-
|
|
471
|
-
|
|
656
|
+
namespace: null,
|
|
657
|
+
namespaceKey: "fragno_db_settings",
|
|
658
|
+
schemaName: "fragno_internal",
|
|
659
|
+
isSettings: true,
|
|
472
660
|
fromVersion: 0,
|
|
473
661
|
toVersion: 5,
|
|
474
|
-
},
|
|
475
|
-
{
|
|
662
|
+
}),
|
|
663
|
+
buildFile({
|
|
476
664
|
schema: "CREATE TABLE comments;",
|
|
477
|
-
path: "placeholder.sql",
|
|
478
665
|
namespace: "comment-db",
|
|
479
666
|
fromVersion: 5,
|
|
480
667
|
toVersion: 10,
|
|
481
|
-
},
|
|
668
|
+
}),
|
|
482
669
|
];
|
|
483
670
|
|
|
484
671
|
const result = postProcessMigrationFilenames(files);
|
|
@@ -489,13 +676,12 @@ describe("postProcessMigrationFilenames", () => {
|
|
|
489
676
|
|
|
490
677
|
it("should pad numbers to 3 digits", () => {
|
|
491
678
|
const files: GenerationInternalResult[] = [
|
|
492
|
-
{
|
|
679
|
+
buildFile({
|
|
493
680
|
schema: "schema",
|
|
494
|
-
path: "placeholder.sql",
|
|
495
681
|
namespace: "test-db",
|
|
496
682
|
fromVersion: 99,
|
|
497
683
|
toVersion: 999,
|
|
498
|
-
},
|
|
684
|
+
}),
|
|
499
685
|
];
|
|
500
686
|
|
|
501
687
|
const result = postProcessMigrationFilenames(files);
|
|
@@ -505,13 +691,12 @@ describe("postProcessMigrationFilenames", () => {
|
|
|
505
691
|
|
|
506
692
|
it("should sanitize namespace with invalid characters", () => {
|
|
507
693
|
const files: GenerationInternalResult[] = [
|
|
508
|
-
{
|
|
694
|
+
buildFile({
|
|
509
695
|
schema: "schema",
|
|
510
|
-
path: "placeholder.sql",
|
|
511
696
|
namespace: "test@db#special!chars",
|
|
512
697
|
fromVersion: 0,
|
|
513
698
|
toVersion: 1,
|
|
514
|
-
},
|
|
699
|
+
}),
|
|
515
700
|
];
|
|
516
701
|
|
|
517
702
|
const result = postProcessMigrationFilenames(files);
|
|
@@ -521,13 +706,12 @@ describe("postProcessMigrationFilenames", () => {
|
|
|
521
706
|
|
|
522
707
|
it("should preserve schema content", () => {
|
|
523
708
|
const files: GenerationInternalResult[] = [
|
|
524
|
-
{
|
|
709
|
+
buildFile({
|
|
525
710
|
schema: "CREATE TABLE users (id INT);",
|
|
526
|
-
path: "placeholder.sql",
|
|
527
711
|
namespace: "user-db",
|
|
528
712
|
fromVersion: 0,
|
|
529
713
|
toVersion: 1,
|
|
530
|
-
},
|
|
714
|
+
}),
|
|
531
715
|
];
|
|
532
716
|
|
|
533
717
|
const result = postProcessMigrationFilenames(files);
|
|
@@ -537,40 +721,39 @@ describe("postProcessMigrationFilenames", () => {
|
|
|
537
721
|
|
|
538
722
|
it("should handle multiple files with settings first and others sorted", () => {
|
|
539
723
|
const files: GenerationInternalResult[] = [
|
|
540
|
-
{
|
|
724
|
+
buildFile({
|
|
541
725
|
schema: "schema1",
|
|
542
|
-
path: "placeholder.sql",
|
|
543
726
|
namespace: "zoo-db",
|
|
544
727
|
fromVersion: 1,
|
|
545
728
|
toVersion: 2,
|
|
546
|
-
},
|
|
547
|
-
{
|
|
729
|
+
}),
|
|
730
|
+
buildFile({
|
|
548
731
|
schema: "schema2",
|
|
549
|
-
|
|
550
|
-
|
|
732
|
+
namespace: null,
|
|
733
|
+
namespaceKey: "fragno_db_settings",
|
|
734
|
+
schemaName: "fragno_internal",
|
|
735
|
+
isSettings: true,
|
|
551
736
|
fromVersion: 0,
|
|
552
737
|
toVersion: 5,
|
|
553
|
-
},
|
|
554
|
-
{
|
|
738
|
+
}),
|
|
739
|
+
buildFile({
|
|
555
740
|
schema: "schema3",
|
|
556
|
-
path: "placeholder.sql",
|
|
557
741
|
namespace: "apple-db",
|
|
558
742
|
fromVersion: 3,
|
|
559
743
|
toVersion: 4,
|
|
560
|
-
},
|
|
561
|
-
{
|
|
744
|
+
}),
|
|
745
|
+
buildFile({
|
|
562
746
|
schema: "schema4",
|
|
563
|
-
path: "placeholder.sql",
|
|
564
747
|
namespace: "mango-db",
|
|
565
748
|
fromVersion: 2,
|
|
566
749
|
toVersion: 3,
|
|
567
|
-
},
|
|
750
|
+
}),
|
|
568
751
|
];
|
|
569
752
|
|
|
570
753
|
const result = postProcessMigrationFilenames(files);
|
|
571
754
|
|
|
572
755
|
expect(result).toHaveLength(4);
|
|
573
|
-
expect(result[0].namespace).
|
|
756
|
+
expect(result[0].namespace).toBeNull();
|
|
574
757
|
expect(result[0].path).toBe("20251024_001_f000_t005_fragno_db_settings.sql");
|
|
575
758
|
expect(result[1].namespace).toBe("apple-db");
|
|
576
759
|
expect(result[1].path).toBe("20251024_002_f003_t004_apple-db.sql");
|
|
@@ -581,13 +764,14 @@ describe("postProcessMigrationFilenames", () => {
|
|
|
581
764
|
});
|
|
582
765
|
|
|
583
766
|
it("should handle ordering numbers beyond 100", () => {
|
|
584
|
-
const files: GenerationInternalResult[] = Array.from({ length: 150 }, (_, i) =>
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
767
|
+
const files: GenerationInternalResult[] = Array.from({ length: 150 }, (_, i) =>
|
|
768
|
+
buildFile({
|
|
769
|
+
schema: `schema${i}`,
|
|
770
|
+
namespace: `db-${String(i).padStart(3, "0")}`,
|
|
771
|
+
fromVersion: 0,
|
|
772
|
+
toVersion: 1,
|
|
773
|
+
}),
|
|
774
|
+
);
|
|
591
775
|
|
|
592
776
|
const result = postProcessMigrationFilenames(files);
|
|
593
777
|
|
|
@@ -598,13 +782,12 @@ describe("postProcessMigrationFilenames", () => {
|
|
|
598
782
|
|
|
599
783
|
it("should preserve hyphens in namespace", () => {
|
|
600
784
|
const files: GenerationInternalResult[] = [
|
|
601
|
-
{
|
|
785
|
+
buildFile({
|
|
602
786
|
schema: "schema",
|
|
603
|
-
path: "placeholder.sql",
|
|
604
787
|
namespace: "my-awesome-db-fragment",
|
|
605
788
|
fromVersion: 0,
|
|
606
789
|
toVersion: 1,
|
|
607
|
-
},
|
|
790
|
+
}),
|
|
608
791
|
];
|
|
609
792
|
|
|
610
793
|
const result = postProcessMigrationFilenames(files);
|
|
@@ -614,13 +797,12 @@ describe("postProcessMigrationFilenames", () => {
|
|
|
614
797
|
|
|
615
798
|
it("should use current date in YYYYMMDD format", () => {
|
|
616
799
|
const files: GenerationInternalResult[] = [
|
|
617
|
-
{
|
|
800
|
+
buildFile({
|
|
618
801
|
schema: "schema",
|
|
619
|
-
path: "placeholder.sql",
|
|
620
802
|
namespace: "test-db",
|
|
621
803
|
fromVersion: 0,
|
|
622
804
|
toVersion: 1,
|
|
623
|
-
},
|
|
805
|
+
}),
|
|
624
806
|
];
|
|
625
807
|
|
|
626
808
|
const result = postProcessMigrationFilenames(files);
|