@fragno-dev/db 0.2.2 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +404 -175
- package/CHANGELOG.md +109 -0
- package/README.md +54 -9
- package/dist/adapters/adapters.d.ts +23 -21
- package/dist/adapters/adapters.d.ts.map +1 -1
- package/dist/adapters/adapters.js.map +1 -1
- package/dist/adapters/generic-sql/driver-config.d.ts +16 -1
- package/dist/adapters/generic-sql/driver-config.d.ts.map +1 -1
- package/dist/adapters/generic-sql/driver-config.js +23 -1
- package/dist/adapters/generic-sql/driver-config.js.map +1 -1
- package/dist/adapters/generic-sql/generic-sql-adapter.d.ts +24 -9
- package/dist/adapters/generic-sql/generic-sql-adapter.d.ts.map +1 -1
- package/dist/adapters/generic-sql/generic-sql-adapter.js +60 -22
- package/dist/adapters/generic-sql/generic-sql-adapter.js.map +1 -1
- package/dist/adapters/generic-sql/generic-sql-uow-executor.js +169 -3
- package/dist/adapters/generic-sql/generic-sql-uow-executor.js.map +1 -1
- package/dist/adapters/generic-sql/migration/cold-kysely.js.map +1 -1
- package/dist/adapters/generic-sql/migration/dialect/mysql.js +25 -6
- package/dist/adapters/generic-sql/migration/dialect/mysql.js.map +1 -1
- package/dist/adapters/generic-sql/migration/dialect/postgres.js +7 -6
- package/dist/adapters/generic-sql/migration/dialect/postgres.js.map +1 -1
- package/dist/adapters/generic-sql/migration/dialect/sqlite.js +193 -16
- package/dist/adapters/generic-sql/migration/dialect/sqlite.js.map +1 -1
- package/dist/adapters/generic-sql/migration/executor.d.ts.map +1 -1
- package/dist/adapters/generic-sql/migration/executor.js +30 -3
- package/dist/adapters/generic-sql/migration/executor.js.map +1 -1
- package/dist/adapters/generic-sql/migration/prepared-migrations.d.ts.map +1 -1
- package/dist/adapters/generic-sql/migration/prepared-migrations.js +9 -9
- package/dist/adapters/generic-sql/migration/prepared-migrations.js.map +1 -1
- package/dist/adapters/generic-sql/migration/sql-generator.js +75 -52
- package/dist/adapters/generic-sql/migration/sql-generator.js.map +1 -1
- package/dist/adapters/generic-sql/query/create-sql-query-compiler.js +7 -6
- package/dist/adapters/generic-sql/query/create-sql-query-compiler.js.map +1 -1
- package/dist/adapters/generic-sql/query/cursor-utils.js +42 -4
- package/dist/adapters/generic-sql/query/cursor-utils.js.map +1 -1
- package/dist/adapters/generic-sql/query/db-now-sql.js +27 -0
- package/dist/adapters/generic-sql/query/db-now-sql.js.map +1 -0
- package/dist/adapters/generic-sql/query/generic-sql-uow-operation-compiler.js +32 -21
- package/dist/adapters/generic-sql/query/generic-sql-uow-operation-compiler.js.map +1 -1
- package/dist/adapters/generic-sql/query/select-builder.js +5 -3
- package/dist/adapters/generic-sql/query/select-builder.js.map +1 -1
- package/dist/adapters/generic-sql/query/sql-query-compiler.js +49 -18
- package/dist/adapters/generic-sql/query/sql-query-compiler.js.map +1 -1
- package/dist/adapters/generic-sql/query/where-builder.js +43 -29
- package/dist/adapters/generic-sql/query/where-builder.js.map +1 -1
- package/dist/adapters/generic-sql/sqlite-storage.d.ts +13 -0
- package/dist/adapters/generic-sql/sqlite-storage.d.ts.map +1 -0
- package/dist/adapters/generic-sql/sqlite-storage.js +15 -0
- package/dist/adapters/generic-sql/sqlite-storage.js.map +1 -0
- package/dist/adapters/generic-sql/uow-decoder.js +6 -2
- package/dist/adapters/generic-sql/uow-decoder.js.map +1 -1
- package/dist/adapters/generic-sql/uow-encoder.js +27 -8
- package/dist/adapters/generic-sql/uow-encoder.js.map +1 -1
- package/dist/adapters/in-memory/condition-evaluator.js +135 -0
- package/dist/adapters/in-memory/condition-evaluator.js.map +1 -0
- package/dist/adapters/in-memory/errors.d.ts +13 -0
- package/dist/adapters/in-memory/errors.d.ts.map +1 -0
- package/dist/adapters/in-memory/errors.js +23 -0
- package/dist/adapters/in-memory/errors.js.map +1 -0
- package/dist/adapters/in-memory/in-memory-adapter.d.ts +27 -0
- package/dist/adapters/in-memory/in-memory-adapter.d.ts.map +1 -0
- package/dist/adapters/in-memory/in-memory-adapter.js +196 -0
- package/dist/adapters/in-memory/in-memory-adapter.js.map +1 -0
- package/dist/adapters/in-memory/in-memory-uow.js +871 -0
- package/dist/adapters/in-memory/in-memory-uow.js.map +1 -0
- package/dist/adapters/in-memory/index.d.ts +4 -0
- package/dist/adapters/in-memory/index.js +4 -0
- package/dist/adapters/in-memory/options.d.ts +30 -0
- package/dist/adapters/in-memory/options.d.ts.map +1 -0
- package/dist/adapters/in-memory/options.js +62 -0
- package/dist/adapters/in-memory/options.js.map +1 -0
- package/dist/adapters/in-memory/reference-resolution.js +26 -0
- package/dist/adapters/in-memory/reference-resolution.js.map +1 -0
- package/dist/adapters/in-memory/sorted-array-index.js +129 -0
- package/dist/adapters/in-memory/sorted-array-index.js.map +1 -0
- package/dist/adapters/in-memory/store.js +71 -0
- package/dist/adapters/in-memory/store.js.map +1 -0
- package/dist/adapters/in-memory/value-comparison.js +28 -0
- package/dist/adapters/in-memory/value-comparison.js.map +1 -0
- package/dist/adapters/shared/from-unit-of-work-compiler.js +51 -24
- package/dist/adapters/shared/from-unit-of-work-compiler.js.map +1 -1
- package/dist/adapters/shared/uow-operation-compiler.js +11 -11
- package/dist/adapters/shared/uow-operation-compiler.js.map +1 -1
- package/dist/adapters/sql/index.d.ts +5 -0
- package/dist/adapters/sql/index.js +4 -0
- package/dist/browser/adapters/adapters.d.ts +61 -0
- package/dist/browser/adapters/adapters.d.ts.map +1 -0
- package/dist/browser/adapters/generic-sql/migration/executor.d.ts +15 -0
- package/dist/browser/adapters/generic-sql/migration/executor.d.ts.map +1 -0
- package/dist/browser/adapters/generic-sql/migration/prepared-migrations.d.ts +66 -0
- package/dist/browser/adapters/generic-sql/migration/prepared-migrations.d.ts.map +1 -0
- package/dist/browser/adapters/generic-sql/sqlite-storage.d.ts +11 -0
- package/dist/browser/adapters/generic-sql/sqlite-storage.d.ts.map +1 -0
- package/dist/browser/adapters/in-memory/in-memory-adapter.d.ts +5 -0
- package/dist/browser/adapters/in-memory/index.d.ts +2 -0
- package/dist/browser/adapters/in-memory/options.d.ts +1 -0
- package/dist/browser/db-fragment-definition-builder.d.ts +237 -0
- package/dist/browser/db-fragment-definition-builder.d.ts.map +1 -0
- package/dist/browser/durable-hooks.d.ts +3 -0
- package/dist/browser/fragments/internal-fragment.d.ts +317 -0
- package/dist/browser/fragments/internal-fragment.d.ts.map +1 -0
- package/dist/browser/fragments/internal-fragment.schema.d.ts +1 -0
- package/dist/browser/hooks/durable-hooks-logger.d.ts +10 -0
- package/dist/browser/hooks/durable-hooks-logger.d.ts.map +1 -0
- package/dist/browser/hooks/hooks.d.ts +146 -0
- package/dist/browser/hooks/hooks.d.ts.map +1 -0
- package/dist/browser/id.js +1 -0
- package/dist/browser/internal/adapter-registry.d.ts +4 -0
- package/dist/browser/internal/outbox-state.d.ts +2 -0
- package/dist/browser/mod.d.ts +15 -0
- package/dist/browser/mod.d.ts.map +1 -0
- package/dist/browser/mod.js +17 -0
- package/dist/browser/mod.js.map +1 -0
- package/dist/browser/mod2.d.ts +48 -0
- package/dist/browser/mod2.d.ts.map +1 -0
- package/dist/browser/naming/sql-naming.d.ts +19 -0
- package/dist/browser/naming/sql-naming.d.ts.map +1 -0
- package/dist/browser/outbox/outbox.d.ts +21 -0
- package/dist/browser/outbox/outbox.d.ts.map +1 -0
- package/dist/browser/query/column-defaults.js +1 -0
- package/dist/browser/query/condition-builder.d.ts +44 -0
- package/dist/browser/query/condition-builder.d.ts.map +1 -0
- package/dist/browser/query/condition-builder.js +97 -0
- package/dist/browser/query/condition-builder.js.map +1 -0
- package/dist/browser/query/cursor.d.ts +105 -0
- package/dist/browser/query/cursor.d.ts.map +1 -0
- package/dist/browser/query/cursor.js +150 -0
- package/dist/browser/query/cursor.js.map +1 -0
- package/dist/browser/query/db-now.d.ts +22 -0
- package/dist/browser/query/db-now.d.ts.map +1 -0
- package/dist/browser/query/db-now.js +33 -0
- package/dist/browser/query/db-now.js.map +1 -0
- package/dist/browser/query/orm/orm.d.ts +18 -0
- package/dist/browser/query/orm/orm.d.ts.map +1 -0
- package/dist/browser/query/simple-query-interface.d.ts +108 -0
- package/dist/browser/query/simple-query-interface.d.ts.map +1 -0
- package/dist/browser/query/unit-of-work/execute-unit-of-work.d.ts +423 -0
- package/dist/browser/query/unit-of-work/execute-unit-of-work.d.ts.map +1 -0
- package/dist/browser/query/unit-of-work/execute-unit-of-work.js +507 -0
- package/dist/browser/query/unit-of-work/execute-unit-of-work.js.map +1 -0
- package/dist/browser/query/unit-of-work/retry-policy.d.ts +23 -0
- package/dist/browser/query/unit-of-work/retry-policy.d.ts.map +1 -0
- package/dist/browser/query/unit-of-work/retry-policy.js +40 -0
- package/dist/browser/query/unit-of-work/retry-policy.js.map +1 -0
- package/dist/browser/query/unit-of-work/unit-of-work.d.ts +703 -0
- package/dist/browser/query/unit-of-work/unit-of-work.d.ts.map +1 -0
- package/dist/browser/query/unit-of-work/unit-of-work.js +1206 -0
- package/dist/browser/query/unit-of-work/unit-of-work.js.map +1 -0
- package/dist/browser/query/value-encoding.js +38 -0
- package/dist/browser/query/value-encoding.js.map +1 -0
- package/dist/browser/schema/create.d.ts +326 -0
- package/dist/browser/schema/create.d.ts.map +1 -0
- package/dist/browser/schema/create.js +89 -0
- package/dist/browser/schema/create.js.map +1 -0
- package/dist/browser/schema/generate-id.js +28 -0
- package/dist/browser/schema/generate-id.js.map +1 -0
- package/dist/browser/shared/providers.d.ts +6 -0
- package/dist/browser/shared/providers.d.ts.map +1 -0
- package/dist/browser/sql-driver/connection/connection-provider.d.ts +13 -0
- package/dist/browser/sql-driver/connection/connection-provider.d.ts.map +1 -0
- package/dist/browser/sql-driver/dialect-adapter/dialect-adapter.d.ts +7 -0
- package/dist/browser/sql-driver/dialect-adapter/dialect-adapter.d.ts.map +1 -0
- package/dist/browser/sql-driver/driver/runtime-driver.d.ts +23 -0
- package/dist/browser/sql-driver/driver/runtime-driver.d.ts.map +1 -0
- package/dist/browser/sql-driver/query-executor/plugin.d.ts +17 -0
- package/dist/browser/sql-driver/query-executor/plugin.d.ts.map +1 -0
- package/dist/browser/sql-driver/query-executor/query-executor.d.ts +36 -0
- package/dist/browser/sql-driver/query-executor/query-executor.d.ts.map +1 -0
- package/dist/browser/sql-driver/sql-driver-adapter.d.ts +29 -0
- package/dist/browser/sql-driver/sql-driver-adapter.d.ts.map +1 -0
- package/dist/browser/sql-driver/sql-driver.d.ts +38 -0
- package/dist/browser/sql-driver/sql-driver.d.ts.map +1 -0
- package/dist/browser/sync/commands.d.ts +15 -0
- package/dist/browser/sync/commands.d.ts.map +1 -0
- package/dist/browser/sync/commands.js +27 -0
- package/dist/browser/sync/commands.js.map +1 -0
- package/dist/browser/sync/types.d.ts +63 -0
- package/dist/browser/sync/types.d.ts.map +1 -0
- package/dist/browser/util/types.d.ts +8 -0
- package/dist/browser/util/types.d.ts.map +1 -0
- package/dist/browser/with-database.d.ts +29 -0
- package/dist/browser/with-database.d.ts.map +1 -0
- package/dist/client.d.ts +4 -0
- package/dist/client.js +5 -0
- package/dist/db-fragment-definition-builder.d.ts +101 -33
- package/dist/db-fragment-definition-builder.d.ts.map +1 -1
- package/dist/db-fragment-definition-builder.js +450 -60
- package/dist/db-fragment-definition-builder.js.map +1 -1
- package/dist/dispatchers/cloudflare-do/dispatcher.d.ts +20 -0
- package/dist/dispatchers/cloudflare-do/dispatcher.d.ts.map +1 -0
- package/dist/dispatchers/cloudflare-do/dispatcher.js +147 -0
- package/dist/dispatchers/cloudflare-do/dispatcher.js.map +1 -0
- package/dist/dispatchers/cloudflare-do/index.d.ts +11 -0
- package/dist/dispatchers/cloudflare-do/index.d.ts.map +1 -0
- package/dist/dispatchers/cloudflare-do/index.js +31 -0
- package/dist/dispatchers/cloudflare-do/index.js.map +1 -0
- package/dist/dispatchers/node/dispatcher.d.ts +14 -0
- package/dist/dispatchers/node/dispatcher.d.ts.map +1 -0
- package/dist/dispatchers/node/dispatcher.js +80 -0
- package/dist/dispatchers/node/dispatcher.js.map +1 -0
- package/dist/dispatchers/node/index.d.ts +12 -0
- package/dist/dispatchers/node/index.d.ts.map +1 -0
- package/dist/dispatchers/node/index.js +27 -0
- package/dist/dispatchers/node/index.js.map +1 -0
- package/dist/durable-hooks.d.ts +31 -0
- package/dist/durable-hooks.d.ts.map +1 -0
- package/dist/durable-hooks.js +23 -0
- package/dist/durable-hooks.js.map +1 -0
- package/dist/fragments/internal-fragment.d.ts +186 -8
- package/dist/fragments/internal-fragment.d.ts.map +1 -1
- package/dist/fragments/internal-fragment.js +203 -38
- package/dist/fragments/internal-fragment.js.map +1 -1
- package/dist/fragments/internal-fragment.routes.js +164 -0
- package/dist/fragments/internal-fragment.routes.js.map +1 -0
- package/dist/fragments/internal-fragment.schema.d.ts +15 -0
- package/dist/fragments/internal-fragment.schema.d.ts.map +1 -0
- package/dist/fragments/internal-fragment.schema.js +39 -0
- package/dist/fragments/internal-fragment.schema.js.map +1 -0
- package/dist/hooks/durable-hooks-logger.d.ts +10 -0
- package/dist/hooks/durable-hooks-logger.d.ts.map +1 -0
- package/dist/hooks/durable-hooks-logger.js +75 -0
- package/dist/hooks/durable-hooks-logger.js.map +1 -0
- package/dist/hooks/durable-hooks-processor.d.ts +1 -0
- package/dist/hooks/durable-hooks-processor.js +80 -0
- package/dist/hooks/durable-hooks-processor.js.map +1 -0
- package/dist/hooks/durable-hooks-runtime.js +44 -0
- package/dist/hooks/durable-hooks-runtime.js.map +1 -0
- package/dist/hooks/hooks.d.ts +100 -1
- package/dist/hooks/hooks.d.ts.map +1 -1
- package/dist/hooks/hooks.js +254 -27
- package/dist/hooks/hooks.js.map +1 -1
- package/dist/id.d.ts +2 -2
- package/dist/id.js +2 -2
- package/dist/internal/adapter-registry.d.ts +11 -0
- package/dist/internal/adapter-registry.d.ts.map +1 -0
- package/dist/internal/adapter-registry.js +135 -0
- package/dist/internal/adapter-registry.js.map +1 -0
- package/dist/internal/outbox-state.d.ts +2 -0
- package/dist/internal/outbox-state.js +26 -0
- package/dist/internal/outbox-state.js.map +1 -0
- package/dist/migration-engine/auto-from-schema.d.ts +33 -0
- package/dist/migration-engine/auto-from-schema.d.ts.map +1 -0
- package/dist/migration-engine/auto-from-schema.js +223 -37
- package/dist/migration-engine/auto-from-schema.js.map +1 -1
- package/dist/migration-engine/generation-engine.d.ts +16 -10
- package/dist/migration-engine/generation-engine.d.ts.map +1 -1
- package/dist/migration-engine/generation-engine.js +86 -35
- package/dist/migration-engine/generation-engine.js.map +1 -1
- package/dist/migration-engine/shared.d.ts +113 -0
- package/dist/migration-engine/shared.d.ts.map +1 -0
- package/dist/migration-engine/shared.js.map +1 -1
- package/dist/mod.d.ts +20 -12
- package/dist/mod.d.ts.map +1 -1
- package/dist/mod.js +18 -12
- package/dist/mod.js.map +1 -1
- package/dist/naming/sql-naming.d.ts +19 -0
- package/dist/naming/sql-naming.d.ts.map +1 -0
- package/dist/naming/sql-naming.js +116 -0
- package/dist/naming/sql-naming.js.map +1 -0
- package/dist/outbox/outbox-builder.js +156 -0
- package/dist/outbox/outbox-builder.js.map +1 -0
- package/dist/outbox/outbox.d.ts +54 -0
- package/dist/outbox/outbox.d.ts.map +1 -0
- package/dist/outbox/outbox.js +37 -0
- package/dist/outbox/outbox.js.map +1 -0
- package/dist/query/column-defaults.js +20 -4
- package/dist/query/column-defaults.js.map +1 -1
- package/dist/query/condition-builder.d.ts +7 -1
- package/dist/query/condition-builder.d.ts.map +1 -1
- package/dist/query/condition-builder.js +5 -1
- package/dist/query/condition-builder.js.map +1 -1
- package/dist/query/cursor-client.d.ts +105 -0
- package/dist/query/cursor-client.d.ts.map +1 -0
- package/dist/query/cursor-client.js +165 -0
- package/dist/query/cursor-client.js.map +1 -0
- package/dist/query/cursor.d.ts +3 -1
- package/dist/query/cursor.d.ts.map +1 -1
- package/dist/query/cursor.js +51 -14
- package/dist/query/cursor.js.map +1 -1
- package/dist/query/db-now.d.ts +22 -0
- package/dist/query/db-now.d.ts.map +1 -0
- package/dist/query/db-now.js +35 -0
- package/dist/query/db-now.js.map +1 -0
- package/dist/query/orm/orm.js.map +1 -1
- package/dist/query/serialize/create-sql-serializer.js +5 -4
- package/dist/query/serialize/create-sql-serializer.js.map +1 -1
- package/dist/query/serialize/dialect/mysql-serializer.js +12 -6
- package/dist/query/serialize/dialect/mysql-serializer.js.map +1 -1
- package/dist/query/serialize/dialect/postgres-serializer.js +25 -7
- package/dist/query/serialize/dialect/postgres-serializer.js.map +1 -1
- package/dist/query/serialize/dialect/sqlite-serializer.js +60 -12
- package/dist/query/serialize/dialect/sqlite-serializer.js.map +1 -1
- package/dist/query/serialize/sql-serializer.js +2 -2
- package/dist/query/serialize/sql-serializer.js.map +1 -1
- package/dist/query/simple-query-interface.d.ts +13 -4
- package/dist/query/simple-query-interface.d.ts.map +1 -1
- package/dist/query/unit-of-work/execute-unit-of-work.d.ts +37 -2
- package/dist/query/unit-of-work/execute-unit-of-work.d.ts.map +1 -1
- package/dist/query/unit-of-work/execute-unit-of-work.js +50 -24
- package/dist/query/unit-of-work/execute-unit-of-work.js.map +1 -1
- package/dist/query/unit-of-work/unit-of-work.d.ts +92 -30
- package/dist/query/unit-of-work/unit-of-work.d.ts.map +1 -1
- package/dist/query/unit-of-work/unit-of-work.js +136 -11
- package/dist/query/unit-of-work/unit-of-work.js.map +1 -1
- package/dist/query/value-decoding.js +16 -6
- package/dist/query/value-decoding.js.map +1 -1
- package/dist/query/value-encoding.js +29 -9
- package/dist/query/value-encoding.js.map +1 -1
- package/dist/schema/create.d.ts +103 -35
- package/dist/schema/create.d.ts.map +1 -1
- package/dist/schema/create.js +172 -58
- package/dist/schema/create.js.map +1 -1
- package/dist/schema/generate-id.js +2 -2
- package/dist/schema/generate-id.js.map +1 -1
- package/dist/schema/type-conversion/create-sql-type-mapper.js +4 -3
- package/dist/schema/type-conversion/create-sql-type-mapper.js.map +1 -1
- package/dist/schema/type-conversion/dialect/sqlite.js +9 -0
- package/dist/schema/type-conversion/dialect/sqlite.js.map +1 -1
- package/dist/schema/validator.d.ts +10 -0
- package/dist/schema/validator.d.ts.map +1 -0
- package/dist/schema/validator.js +123 -0
- package/dist/schema/validator.js.map +1 -0
- package/dist/schema-output/drizzle.d.ts +30 -0
- package/dist/schema-output/drizzle.d.ts.map +1 -0
- package/dist/{adapters/drizzle/generate.js → schema-output/drizzle.js} +88 -60
- package/dist/schema-output/drizzle.js.map +1 -0
- package/dist/schema-output/prisma.d.ts +17 -0
- package/dist/schema-output/prisma.d.ts.map +1 -0
- package/dist/schema-output/prisma.js +307 -0
- package/dist/schema-output/prisma.js.map +1 -0
- package/dist/sql-driver/dialects/durable-object-dialect.js +3 -9
- package/dist/sql-driver/dialects/durable-object-dialect.js.map +1 -1
- package/dist/sql-driver/query-executor/default-query-executor.js.map +1 -1
- package/dist/sql-driver/query-executor/query-executor-base.js.map +1 -1
- package/dist/sql-driver/sql-driver-adapter.js.map +1 -1
- package/dist/sql-driver/sql.js.map +1 -1
- package/dist/sync/commands.d.ts +15 -0
- package/dist/sync/commands.d.ts.map +1 -0
- package/dist/sync/commands.js +27 -0
- package/dist/sync/commands.js.map +1 -0
- package/dist/sync/index.d.ts +4 -0
- package/dist/sync/index.js +4 -0
- package/dist/sync/read-tracking.d.ts +25 -0
- package/dist/sync/read-tracking.d.ts.map +1 -0
- package/dist/sync/read-tracking.js +148 -0
- package/dist/sync/read-tracking.js.map +1 -0
- package/dist/sync/submit.js +213 -0
- package/dist/sync/submit.js.map +1 -0
- package/dist/sync/types.d.ts +63 -0
- package/dist/sync/types.d.ts.map +1 -0
- package/dist/util/default-database-adapter.js +66 -0
- package/dist/util/default-database-adapter.js.map +1 -0
- package/dist/with-database.d.ts +3 -6
- package/dist/with-database.d.ts.map +1 -1
- package/dist/with-database.js +8 -7
- package/dist/with-database.js.map +1 -1
- package/package.json +62 -55
- package/src/adapters/adapters.ts +33 -26
- package/src/adapters/drizzle/migrate-drizzle.test.ts +99 -41
- package/src/adapters/drizzle/migration-parity-drizzle-kit.test.ts +601 -0
- package/src/adapters/drizzle/test-utils.ts +13 -8
- package/src/adapters/generic-sql/driver-config.ts +38 -0
- package/src/adapters/generic-sql/generic-sql-adapter.test.ts +10 -8
- package/src/adapters/generic-sql/generic-sql-adapter.ts +117 -34
- package/src/adapters/generic-sql/generic-sql-uow-executor.test.ts +55 -0
- package/src/adapters/generic-sql/generic-sql-uow-executor.ts +297 -3
- package/src/adapters/generic-sql/migration/adapter-migration-parity.test.ts +120 -0
- package/src/adapters/generic-sql/migration/cold-kysely.ts +1 -0
- package/src/adapters/generic-sql/migration/dialect/mysql.test.ts +27 -8
- package/src/adapters/generic-sql/migration/dialect/mysql.ts +47 -8
- package/src/adapters/generic-sql/migration/dialect/postgres.test.ts +28 -9
- package/src/adapters/generic-sql/migration/dialect/postgres.ts +9 -4
- package/src/adapters/generic-sql/migration/dialect/sqlite.test.ts +839 -8
- package/src/adapters/generic-sql/migration/dialect/sqlite.ts +396 -53
- package/src/adapters/generic-sql/migration/executor.test.ts +52 -0
- package/src/adapters/generic-sql/migration/executor.ts +47 -4
- package/src/adapters/generic-sql/migration/prepared-migrations.test.ts +238 -46
- package/src/adapters/generic-sql/migration/prepared-migrations.ts +21 -13
- package/src/adapters/generic-sql/migration/sql-generator.ts +145 -66
- package/src/adapters/generic-sql/query/create-sql-query-compiler.ts +11 -8
- package/src/adapters/generic-sql/query/cursor-utils.test.ts +272 -0
- package/src/adapters/generic-sql/query/cursor-utils.ts +42 -7
- package/src/adapters/generic-sql/query/db-now-sql.ts +49 -0
- package/src/adapters/generic-sql/query/generic-sql-uow-operation-compiler.test.ts +171 -35
- package/src/adapters/generic-sql/query/generic-sql-uow-operation-compiler.ts +53 -40
- package/src/adapters/generic-sql/query/select-builder.test.ts +16 -11
- package/src/adapters/generic-sql/query/select-builder.ts +7 -3
- package/src/adapters/generic-sql/query/sql-query-compiler.test.ts +75 -6
- package/src/adapters/generic-sql/query/sql-query-compiler.ts +129 -24
- package/src/adapters/generic-sql/query/where-builder.test.ts +96 -20
- package/src/adapters/generic-sql/query/where-builder.ts +112 -41
- package/src/adapters/{kysely/kysely-adapter-pglite.test.ts → generic-sql/sql-adapter-pglite-migrations.test.ts} +11 -20
- package/src/adapters/generic-sql/sql-adapter-pglite-pagination.test.ts +851 -0
- package/src/adapters/{drizzle/drizzle-adapter-pglite.test.ts → generic-sql/sql-adapter-pglite-queries.test.ts} +18 -15
- package/src/adapters/generic-sql/{test/generic-drizzle-adapter-sqlite3.test.ts → sql-adapter-sqlite3-driver.test.ts} +282 -14
- package/src/adapters/{drizzle/drizzle-adapter-sqlite3.test.ts → generic-sql/sql-adapter-sqlite3-uow.test.ts} +129 -12
- package/src/adapters/{kysely/kysely-adapter-sqlocal.test.ts → generic-sql/sql-adapter-sqlocal.test.ts} +9 -7
- package/src/adapters/generic-sql/sqlite-storage.ts +20 -0
- package/src/adapters/generic-sql/uow-decoder.test.ts +5 -4
- package/src/adapters/generic-sql/uow-decoder.ts +23 -5
- package/src/adapters/generic-sql/uow-encoder.test.ts +36 -3
- package/src/adapters/generic-sql/uow-encoder.ts +48 -13
- package/src/adapters/in-memory/condition-evaluator.test.ts +194 -0
- package/src/adapters/in-memory/condition-evaluator.ts +280 -0
- package/src/adapters/in-memory/errors.ts +20 -0
- package/src/adapters/in-memory/in-memory-adapter.ts +388 -0
- package/src/adapters/in-memory/in-memory-uow.mutations.test.ts +344 -0
- package/src/adapters/in-memory/in-memory-uow.retrieval.test.ts +255 -0
- package/src/adapters/in-memory/in-memory-uow.ts +1724 -0
- package/src/adapters/in-memory/index.ts +3 -0
- package/src/adapters/in-memory/options.test.ts +42 -0
- package/src/adapters/in-memory/options.ts +91 -0
- package/src/adapters/in-memory/outbox.test.ts +361 -0
- package/src/adapters/in-memory/reference-resolution.test.ts +51 -0
- package/src/adapters/in-memory/reference-resolution.ts +67 -0
- package/src/adapters/in-memory/sorted-array-index.test.ts +124 -0
- package/src/adapters/in-memory/sorted-array-index.ts +228 -0
- package/src/adapters/in-memory/store.test.ts +69 -0
- package/src/adapters/in-memory/store.ts +145 -0
- package/src/adapters/in-memory/value-comparison.ts +53 -0
- package/src/adapters/in-memory/value-normalization.test.ts +58 -0
- package/src/adapters/prisma/prisma-adapter-sqlite3.test.ts +1207 -0
- package/src/adapters/shared/from-unit-of-work-compiler.ts +159 -47
- package/src/adapters/shared/uow-operation-compiler.ts +28 -18
- package/src/adapters/sql/index.ts +12 -0
- package/src/browser/mod.ts +64 -0
- package/src/client.ts +19 -0
- package/src/db-fragment-definition-builder.test.ts +845 -53
- package/src/db-fragment-definition-builder.ts +911 -95
- package/src/db-fragment-instantiator.test.ts +210 -94
- package/src/db-fragment-integration.test.ts +17 -12
- package/src/dispatchers/cloudflare-do/dispatcher.ts +204 -0
- package/src/dispatchers/cloudflare-do/index.test.ts +206 -0
- package/src/dispatchers/cloudflare-do/index.ts +63 -0
- package/src/dispatchers/node/dispatcher.ts +112 -0
- package/src/dispatchers/node/index.test.ts +120 -0
- package/src/dispatchers/node/index.ts +50 -0
- package/src/durable-hooks.test.ts +80 -0
- package/src/durable-hooks.ts +67 -0
- package/src/fragments/internal-fragment.routes.test.ts +570 -0
- package/src/fragments/internal-fragment.routes.ts +334 -0
- package/src/fragments/internal-fragment.schema.ts +95 -0
- package/src/fragments/internal-fragment.test.ts +505 -83
- package/src/fragments/internal-fragment.ts +453 -70
- package/src/hooks/durable-hooks-logger.ts +126 -0
- package/src/hooks/durable-hooks-processor.pglite.test.ts +87 -0
- package/src/hooks/durable-hooks-processor.test.ts +282 -0
- package/src/hooks/durable-hooks-processor.ts +173 -0
- package/src/hooks/durable-hooks-runtime.test.ts +65 -0
- package/src/hooks/durable-hooks-runtime.ts +81 -0
- package/src/hooks/hooks.test.ts +455 -34
- package/src/hooks/hooks.ts +501 -34
- package/src/id.test.ts +34 -0
- package/src/id.ts +1 -3
- package/src/internal/adapter-registry.test.ts +93 -0
- package/src/internal/adapter-registry.ts +239 -0
- package/src/internal/outbox-state.ts +43 -0
- package/src/migration-engine/auto-from-schema.test.ts +107 -14
- package/src/migration-engine/auto-from-schema.ts +365 -44
- package/src/migration-engine/create.test.ts +4 -3
- package/src/migration-engine/create.ts +1 -1
- package/src/migration-engine/generation-engine.test.ts +292 -110
- package/src/migration-engine/generation-engine.ts +117 -66
- package/src/migration-engine/shared.ts +14 -0
- package/src/mod.ts +95 -39
- package/src/naming/sql-naming.ts +181 -0
- package/src/outbox/outbox-builder.ts +241 -0
- package/src/outbox/outbox.test.ts +424 -0
- package/src/outbox/outbox.ts +139 -0
- package/src/query/column-defaults.ts +42 -4
- package/src/query/condition-builder.test.ts +18 -3
- package/src/query/condition-builder.ts +7 -0
- package/src/query/cursor-client.test.ts +70 -0
- package/src/query/cursor-client.ts +263 -0
- package/src/query/cursor.test.ts +119 -20
- package/src/query/cursor.ts +88 -27
- package/src/query/db-now.ts +73 -0
- package/src/query/orm/orm.ts +2 -2
- package/src/query/query-type.test.ts +4 -3
- package/src/query/serialize/create-sql-serializer.ts +10 -5
- package/src/query/serialize/dialect/mysql-serializer.ts +13 -5
- package/src/query/serialize/dialect/postgres-serializer.ts +35 -5
- package/src/query/serialize/dialect/sqlite-serializer.test.ts +90 -3
- package/src/query/serialize/dialect/sqlite-serializer.ts +108 -12
- package/src/query/serialize/sql-serializer.ts +4 -4
- package/src/query/simple-query-interface.ts +15 -4
- package/src/query/unit-of-work/execute-unit-of-work.test.ts +372 -10
- package/src/query/unit-of-work/execute-unit-of-work.ts +87 -27
- package/src/query/unit-of-work/retry-policy.test.ts +1 -0
- package/src/query/unit-of-work/tx-builder.test.ts +73 -1
- package/src/query/unit-of-work/unit-of-work-coordinator.test.ts +17 -16
- package/src/query/unit-of-work/unit-of-work-types.test.ts +42 -12
- package/src/query/unit-of-work/unit-of-work.test.ts +196 -39
- package/src/query/unit-of-work/unit-of-work.ts +309 -38
- package/src/query/value-decoding.test.ts +63 -4
- package/src/query/value-decoding.ts +32 -6
- package/src/query/value-encoding.test.ts +86 -2
- package/src/query/value-encoding.ts +56 -6
- package/src/schema/create.test.ts +293 -47
- package/src/schema/create.ts +406 -70
- package/src/schema/generate-id.test.ts +3 -2
- package/src/schema/generate-id.ts +2 -2
- package/src/schema/serialize.test.ts +18 -5
- package/src/schema/type-conversion/create-sql-type-mapper.ts +8 -3
- package/src/schema/type-conversion/dialect/sqlite.ts +18 -0
- package/src/schema/type-conversion/type-mapping.test.ts +26 -1
- package/src/schema/validator.test.ts +199 -0
- package/src/schema/validator.ts +232 -0
- package/src/{adapters/drizzle/generate.test.ts → schema-output/drizzle.test.ts} +232 -129
- package/src/{adapters/drizzle/generate.ts → schema-output/drizzle.ts} +155 -99
- package/src/schema-output/prisma.test.ts +694 -0
- package/src/schema-output/prisma.ts +593 -0
- package/src/sql-driver/better-sqlite3.test.ts +5 -3
- package/src/sql-driver/dialects/durable-object-dialect.ts +3 -8
- package/src/sql-driver/query-executor/default-query-executor.ts +1 -1
- package/src/sql-driver/query-executor/query-executor-base.ts +1 -1
- package/src/sql-driver/query-executor/query-executor.ts +1 -1
- package/src/sql-driver/sql-driver-adapter.ts +2 -2
- package/src/sql-driver/sql.ts +2 -1
- package/src/sql-driver/sqlocal.test.ts +4 -2
- package/src/sync/commands.test.ts +39 -0
- package/src/sync/commands.ts +51 -0
- package/src/sync/conflict-checker.test.ts +450 -0
- package/src/sync/conflict-checker.ts +248 -0
- package/src/sync/index.ts +14 -0
- package/src/sync/plan.ts +9 -0
- package/src/sync/read-tracking.test.ts +177 -0
- package/src/sync/read-tracking.ts +287 -0
- package/src/sync/submit.test.ts +205 -0
- package/src/sync/submit.ts +328 -0
- package/src/sync/types.ts +80 -0
- package/src/util/default-database-adapter.ts +119 -0
- package/src/with-database.ts +20 -31
- package/tsconfig.json +1 -1
- package/tsdown.config.ts +38 -24
- package/vitest.config.ts +1 -0
- package/dist/adapters/drizzle/drizzle-adapter.d.ts +0 -20
- package/dist/adapters/drizzle/drizzle-adapter.d.ts.map +0 -1
- package/dist/adapters/drizzle/drizzle-adapter.js +0 -27
- package/dist/adapters/drizzle/drizzle-adapter.js.map +0 -1
- package/dist/adapters/drizzle/generate.d.ts +0 -30
- package/dist/adapters/drizzle/generate.d.ts.map +0 -1
- package/dist/adapters/drizzle/generate.js.map +0 -1
- package/dist/adapters/kysely/kysely-adapter.d.ts +0 -19
- package/dist/adapters/kysely/kysely-adapter.d.ts.map +0 -1
- package/dist/adapters/kysely/kysely-adapter.js +0 -17
- package/dist/adapters/kysely/kysely-adapter.js.map +0 -1
- package/dist/adapters/shared/table-name-mapper.d.ts +0 -12
- package/dist/adapters/shared/table-name-mapper.d.ts.map +0 -1
- package/dist/adapters/shared/table-name-mapper.js +0 -43
- package/dist/adapters/shared/table-name-mapper.js.map +0 -1
- package/dist/node_modules/.pnpm/rou3@0.7.10/node_modules/rou3/dist/index.js +0 -165
- package/dist/node_modules/.pnpm/rou3@0.7.10/node_modules/rou3/dist/index.js.map +0 -1
- package/dist/packages/fragno/dist/api/bind-services.js +0 -20
- package/dist/packages/fragno/dist/api/bind-services.js.map +0 -1
- package/dist/packages/fragno/dist/api/error.js +0 -48
- package/dist/packages/fragno/dist/api/error.js.map +0 -1
- package/dist/packages/fragno/dist/api/fragment-definition-builder.js +0 -320
- package/dist/packages/fragno/dist/api/fragment-definition-builder.js.map +0 -1
- package/dist/packages/fragno/dist/api/fragment-instantiator.js +0 -525
- package/dist/packages/fragno/dist/api/fragment-instantiator.js.map +0 -1
- package/dist/packages/fragno/dist/api/fragno-response.js +0 -73
- package/dist/packages/fragno/dist/api/fragno-response.js.map +0 -1
- package/dist/packages/fragno/dist/api/internal/response-stream.js +0 -81
- package/dist/packages/fragno/dist/api/internal/response-stream.js.map +0 -1
- package/dist/packages/fragno/dist/api/internal/route.js +0 -10
- package/dist/packages/fragno/dist/api/internal/route.js.map +0 -1
- package/dist/packages/fragno/dist/api/mutable-request-state.js +0 -97
- package/dist/packages/fragno/dist/api/mutable-request-state.js.map +0 -1
- package/dist/packages/fragno/dist/api/request-context-storage.js +0 -43
- package/dist/packages/fragno/dist/api/request-context-storage.js.map +0 -1
- package/dist/packages/fragno/dist/api/request-input-context.js +0 -118
- package/dist/packages/fragno/dist/api/request-input-context.js.map +0 -1
- package/dist/packages/fragno/dist/api/request-middleware.js +0 -83
- package/dist/packages/fragno/dist/api/request-middleware.js.map +0 -1
- package/dist/packages/fragno/dist/api/request-output-context.js +0 -119
- package/dist/packages/fragno/dist/api/request-output-context.js.map +0 -1
- package/dist/packages/fragno/dist/api/route.js +0 -17
- package/dist/packages/fragno/dist/api/route.js.map +0 -1
- package/dist/packages/fragno/dist/internal/symbols.js +0 -10
- package/dist/packages/fragno/dist/internal/symbols.js.map +0 -1
- package/dist/schema-generator/schema-generator.d.ts +0 -15
- package/dist/schema-generator/schema-generator.d.ts.map +0 -1
- package/src/adapters/drizzle/drizzle-adapter.ts +0 -39
- package/src/adapters/kysely/kysely-adapter.ts +0 -27
- package/src/adapters/shared/table-name-mapper.ts +0 -50
- package/src/schema-generator/schema-generator.ts +0 -12
package/dist/schema/create.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createId } from "../id.js";
|
|
2
|
+
import { FragnoDbValidationError, createTableStandardSchemaProps, createTableValidator } from "./validator.js";
|
|
2
3
|
import { generateId } from "./generate-id.js";
|
|
3
4
|
|
|
4
5
|
//#region src/schema/create.ts
|
|
@@ -7,21 +8,24 @@ var RelationInit = class {
|
|
|
7
8
|
referencedTable;
|
|
8
9
|
referencer;
|
|
9
10
|
on = [];
|
|
10
|
-
|
|
11
|
+
foreignKey;
|
|
12
|
+
constructor(type, referencedTable, referencer, options) {
|
|
11
13
|
this.type = type;
|
|
12
14
|
this.referencedTable = referencedTable;
|
|
13
15
|
this.referencer = referencer;
|
|
16
|
+
this.foreignKey = options?.foreignKey ?? true;
|
|
14
17
|
}
|
|
15
18
|
};
|
|
16
19
|
var ExplicitRelationInit = class extends RelationInit {
|
|
17
|
-
init(
|
|
20
|
+
init(name) {
|
|
18
21
|
return {
|
|
19
|
-
id: `${this.referencer.
|
|
22
|
+
id: `${this.referencer.name}_${this.referencedTable.name}`,
|
|
20
23
|
on: this.on,
|
|
21
|
-
name
|
|
24
|
+
name,
|
|
22
25
|
referencer: this.referencer,
|
|
23
26
|
table: this.referencedTable,
|
|
24
|
-
type: this.type
|
|
27
|
+
type: this.type,
|
|
28
|
+
foreignKey: this.foreignKey
|
|
25
29
|
};
|
|
26
30
|
}
|
|
27
31
|
};
|
|
@@ -42,7 +46,6 @@ const runtimeDefaultBuilder = {
|
|
|
42
46
|
var Column = class {
|
|
43
47
|
type;
|
|
44
48
|
name = "";
|
|
45
|
-
ormName = "";
|
|
46
49
|
isNullable = false;
|
|
47
50
|
role = "regular";
|
|
48
51
|
isHidden = false;
|
|
@@ -178,6 +181,20 @@ var VersionColumn = class extends Column {
|
|
|
178
181
|
this.defaultTo(0).hidden();
|
|
179
182
|
}
|
|
180
183
|
};
|
|
184
|
+
function cloneColumn(col) {
|
|
185
|
+
let clonedCol;
|
|
186
|
+
if (col instanceof InternalIdColumn) clonedCol = new InternalIdColumn();
|
|
187
|
+
else if (col instanceof VersionColumn) clonedCol = new VersionColumn();
|
|
188
|
+
else if (col instanceof IdColumn) clonedCol = new IdColumn(col.type);
|
|
189
|
+
else clonedCol = new Column(col.type);
|
|
190
|
+
clonedCol.name = col.name;
|
|
191
|
+
clonedCol.isNullable = col.isNullable;
|
|
192
|
+
clonedCol.role = col.role;
|
|
193
|
+
clonedCol.isHidden = col.isHidden;
|
|
194
|
+
clonedCol.default = col.default;
|
|
195
|
+
clonedCol.tableName = col.tableName;
|
|
196
|
+
return clonedCol;
|
|
197
|
+
}
|
|
181
198
|
function column(type) {
|
|
182
199
|
return new Column(type);
|
|
183
200
|
}
|
|
@@ -197,7 +214,7 @@ function referenceColumn() {
|
|
|
197
214
|
* Input accepts string | FragnoId | null, output returns FragnoId.
|
|
198
215
|
*/
|
|
199
216
|
function idColumn() {
|
|
200
|
-
const col = new IdColumn("varchar(
|
|
217
|
+
const col = new IdColumn("varchar(128)");
|
|
201
218
|
col.role = "external-id";
|
|
202
219
|
col.defaultTo$((b) => b.cuid());
|
|
203
220
|
return col;
|
|
@@ -304,12 +321,15 @@ var FragnoReference = class FragnoReference {
|
|
|
304
321
|
return this.#internalId;
|
|
305
322
|
}
|
|
306
323
|
};
|
|
324
|
+
const validationClasses = {
|
|
325
|
+
FragnoId,
|
|
326
|
+
FragnoReference
|
|
327
|
+
};
|
|
307
328
|
var TableBuilder = class {
|
|
308
329
|
#name;
|
|
309
330
|
#columns;
|
|
310
331
|
#relations;
|
|
311
332
|
#indexes;
|
|
312
|
-
#ormName = "";
|
|
313
333
|
#columnOrder = [];
|
|
314
334
|
constructor(name) {
|
|
315
335
|
this.#name = name;
|
|
@@ -332,15 +352,26 @@ var TableBuilder = class {
|
|
|
332
352
|
getColumnOrder() {
|
|
333
353
|
return this.#columnOrder;
|
|
334
354
|
}
|
|
335
|
-
addColumn(
|
|
355
|
+
addColumn(name, colOrType) {
|
|
336
356
|
const col = typeof colOrType === "string" ? column(colOrType) : colOrType;
|
|
337
|
-
col.
|
|
338
|
-
|
|
339
|
-
this.#
|
|
340
|
-
this.#columnOrder.push(ormName);
|
|
357
|
+
col.name = name;
|
|
358
|
+
this.#columns[name] = col;
|
|
359
|
+
this.#columnOrder.push(name);
|
|
341
360
|
return this;
|
|
342
361
|
}
|
|
343
362
|
/**
|
|
363
|
+
* Alter an existing column.
|
|
364
|
+
*/
|
|
365
|
+
alterColumn(name) {
|
|
366
|
+
return { nullable: (nullable) => {
|
|
367
|
+
const column$1 = this.#columns[name];
|
|
368
|
+
if (!column$1) throw new Error(`Unknown column name ${String(name)}`);
|
|
369
|
+
const updated = cloneColumn(column$1).nullable(nullable ?? true);
|
|
370
|
+
this.#columns[name] = updated;
|
|
371
|
+
return this;
|
|
372
|
+
} };
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
344
375
|
* Create an index on the specified columns.
|
|
345
376
|
*/
|
|
346
377
|
createIndex(name, columns, options) {
|
|
@@ -367,20 +398,16 @@ var TableBuilder = class {
|
|
|
367
398
|
let versionCol;
|
|
368
399
|
if (!this.#columns["_internalId"]) {
|
|
369
400
|
const col = internalIdColumn();
|
|
370
|
-
col.ormName = "_internalId";
|
|
371
401
|
col.name = "_internalId";
|
|
372
402
|
this.#columns["_internalId"] = col;
|
|
373
403
|
}
|
|
374
404
|
if (!this.#columns["_version"]) {
|
|
375
405
|
const col = versionColumn();
|
|
376
|
-
col.ormName = "_version";
|
|
377
406
|
col.name = "_version";
|
|
378
407
|
this.#columns["_version"] = col;
|
|
379
408
|
}
|
|
380
|
-
const ormName = this.#ormName || this.#name;
|
|
381
409
|
const table = {
|
|
382
410
|
name: this.#name,
|
|
383
|
-
ormName,
|
|
384
411
|
columns: this.#columns,
|
|
385
412
|
relations: this.#relations,
|
|
386
413
|
indexes: this.#indexes,
|
|
@@ -397,6 +424,8 @@ var TableBuilder = class {
|
|
|
397
424
|
return versionCol;
|
|
398
425
|
}
|
|
399
426
|
};
|
|
427
|
+
table["~standard"] = createTableStandardSchemaProps(table, validationClasses);
|
|
428
|
+
table.validate = createTableValidator(table, validationClasses);
|
|
400
429
|
for (const k in this.#columns) {
|
|
401
430
|
const column$1 = this.#columns[k];
|
|
402
431
|
if (!column$1) continue;
|
|
@@ -412,15 +441,43 @@ var TableBuilder = class {
|
|
|
412
441
|
}
|
|
413
442
|
};
|
|
414
443
|
var SchemaBuilder = class SchemaBuilder {
|
|
444
|
+
#name;
|
|
415
445
|
#tables;
|
|
416
446
|
#version = 0;
|
|
417
447
|
#operations = [];
|
|
418
|
-
|
|
448
|
+
#tableNames = /* @__PURE__ */ new Set();
|
|
449
|
+
#indexNames = /* @__PURE__ */ new Set();
|
|
450
|
+
constructor(name, existingSchema) {
|
|
451
|
+
this.#name = name;
|
|
419
452
|
if (existingSchema) {
|
|
420
453
|
this.#tables = existingSchema.tables;
|
|
421
454
|
this.#version = existingSchema.version;
|
|
422
455
|
this.#operations = [...existingSchema.operations];
|
|
423
456
|
} else this.#tables = {};
|
|
457
|
+
for (const table of Object.values(this.#tables)) {
|
|
458
|
+
this.#registerTableName(table.name);
|
|
459
|
+
for (const index of Object.values(table.indexes)) this.#registerIndexName(index.name, table.name);
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
#registerTableName(name) {
|
|
463
|
+
if (this.#tableNames.has(name)) throw new Error(`Duplicate table name "${name}" in schema "${this.#name}".`);
|
|
464
|
+
this.#tableNames.add(name);
|
|
465
|
+
}
|
|
466
|
+
#registerIndexName(name, tableName) {
|
|
467
|
+
if (this.#indexNames.has(name)) throw new Error(`Duplicate index name "${name}" in schema "${this.#name}". Index names must be unique across tables (conflict on "${tableName}").`);
|
|
468
|
+
this.#indexNames.add(name);
|
|
469
|
+
}
|
|
470
|
+
#rebindRelations(tableName, newTable) {
|
|
471
|
+
for (const table of Object.values(this.#tables)) for (const relation of Object.values(table.relations)) {
|
|
472
|
+
if (relation.table.name === tableName) relation.table = newTable;
|
|
473
|
+
if (relation.referencer.name === tableName) relation.referencer = newTable;
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
#isJoinColumnIndexed(table, columnName) {
|
|
477
|
+
const idColumnName = table.getIdColumn().name;
|
|
478
|
+
const internalIdColumnName = table.getInternalIdColumn().name;
|
|
479
|
+
if (columnName === idColumnName || columnName === internalIdColumnName) return true;
|
|
480
|
+
return Object.values(table.indexes).some((index) => index.columnNames.some((name) => name === columnName));
|
|
424
481
|
}
|
|
425
482
|
/**
|
|
426
483
|
* Add an existing schema to this builder.
|
|
@@ -428,29 +485,39 @@ var SchemaBuilder = class SchemaBuilder {
|
|
|
428
485
|
*
|
|
429
486
|
* @example
|
|
430
487
|
* ```ts
|
|
431
|
-
* const builder = new SchemaBuilder()
|
|
488
|
+
* const builder = new SchemaBuilder("combined")
|
|
432
489
|
* .add(userSchema)
|
|
433
490
|
* .add(postSchema)
|
|
434
491
|
* .addTable("comments", ...);
|
|
435
492
|
* ```
|
|
436
493
|
*/
|
|
437
494
|
mergeWithExistingSchema(schema$1) {
|
|
495
|
+
for (const table of Object.values(schema$1.tables)) {
|
|
496
|
+
if (this.#tableNames.has(table.name)) throw new Error(`Duplicate table name "${table.name}" in schema "${this.#name}" when merging.`);
|
|
497
|
+
for (const index of Object.values(table.indexes)) if (this.#indexNames.has(index.name)) throw new Error(`Duplicate index name "${index.name}" in schema "${this.#name}" when merging (conflict on "${table.name}").`);
|
|
498
|
+
}
|
|
438
499
|
this.#tables = {
|
|
439
500
|
...this.#tables,
|
|
440
501
|
...schema$1.tables
|
|
441
502
|
};
|
|
442
503
|
this.#operations = [...this.#operations, ...schema$1.operations];
|
|
443
504
|
this.#version += schema$1.version;
|
|
505
|
+
for (const table of Object.values(schema$1.tables)) {
|
|
506
|
+
this.#tableNames.add(table.name);
|
|
507
|
+
for (const index of Object.values(table.indexes)) this.#indexNames.add(index.name);
|
|
508
|
+
}
|
|
444
509
|
return this;
|
|
445
510
|
}
|
|
446
511
|
/**
|
|
447
512
|
* Add a table to the schema. Increments the version counter.
|
|
448
513
|
*/
|
|
449
|
-
addTable(
|
|
514
|
+
addTable(name, callback) {
|
|
450
515
|
this.#version++;
|
|
451
|
-
|
|
516
|
+
if (this.#tableNames.has(name)) throw new Error(`Duplicate table name "${name}" in schema "${this.#name}".`);
|
|
517
|
+
const result = callback(new TableBuilder(name));
|
|
452
518
|
const builtTable = result.build();
|
|
453
|
-
|
|
519
|
+
const indexNames = result.getIndexes().map((idx) => idx.name);
|
|
520
|
+
for (const indexName of indexNames) if (this.#indexNames.has(indexName)) throw new Error(`Duplicate index name "${indexName}" in schema "${this.#name}". Index names must be unique across tables (conflict on "${name}").`);
|
|
454
521
|
const subOperations = [];
|
|
455
522
|
const columnOrder = result.getColumnOrder();
|
|
456
523
|
for (const colName of columnOrder) {
|
|
@@ -458,34 +525,36 @@ var SchemaBuilder = class SchemaBuilder {
|
|
|
458
525
|
subOperations.push({
|
|
459
526
|
type: "add-column",
|
|
460
527
|
columnName: colName,
|
|
461
|
-
column: col
|
|
528
|
+
column: cloneColumn(col)
|
|
462
529
|
});
|
|
463
530
|
}
|
|
464
531
|
if (builtTable.columns["_internalId"]) subOperations.push({
|
|
465
532
|
type: "add-column",
|
|
466
533
|
columnName: "_internalId",
|
|
467
|
-
column: builtTable.columns["_internalId"]
|
|
534
|
+
column: cloneColumn(builtTable.columns["_internalId"])
|
|
468
535
|
});
|
|
469
536
|
if (builtTable.columns["_version"]) subOperations.push({
|
|
470
537
|
type: "add-column",
|
|
471
538
|
columnName: "_version",
|
|
472
|
-
column: builtTable.columns["_version"]
|
|
539
|
+
column: cloneColumn(builtTable.columns["_version"])
|
|
473
540
|
});
|
|
474
541
|
for (const idx of result.getIndexes()) subOperations.push({
|
|
475
542
|
type: "add-index",
|
|
476
543
|
name: idx.name,
|
|
477
|
-
columns: idx.columns.map((c) => c.
|
|
544
|
+
columns: idx.columns.map((c) => c.name),
|
|
478
545
|
unique: idx.unique
|
|
479
546
|
});
|
|
480
547
|
this.#operations.push({
|
|
481
548
|
type: "add-table",
|
|
482
|
-
tableName:
|
|
549
|
+
tableName: name,
|
|
483
550
|
operations: subOperations
|
|
484
551
|
});
|
|
485
552
|
this.#tables = {
|
|
486
553
|
...this.#tables,
|
|
487
|
-
[
|
|
554
|
+
[name]: builtTable
|
|
488
555
|
};
|
|
556
|
+
this.#tableNames.add(name);
|
|
557
|
+
for (const indexName of indexNames) this.#indexNames.add(indexName);
|
|
489
558
|
return this;
|
|
490
559
|
}
|
|
491
560
|
/**
|
|
@@ -497,7 +566,7 @@ var SchemaBuilder = class SchemaBuilder {
|
|
|
497
566
|
* @example
|
|
498
567
|
* ```ts
|
|
499
568
|
* // One-to-one or many-to-one: post -> user
|
|
500
|
-
* schema(s => s
|
|
569
|
+
* schema("blog", s => s
|
|
501
570
|
* .addTable("users", t => t.addColumn("id", idColumn()))
|
|
502
571
|
* .addTable("posts", t => t
|
|
503
572
|
* .addColumn("id", idColumn())
|
|
@@ -522,24 +591,43 @@ var SchemaBuilder = class SchemaBuilder {
|
|
|
522
591
|
* from: { table: "users", column: "invitedBy" },
|
|
523
592
|
* to: { table: "users", column: "id" },
|
|
524
593
|
* })
|
|
594
|
+
*
|
|
595
|
+
* // Join-only relation (no foreign key)
|
|
596
|
+
* .addReference("invitedUser", {
|
|
597
|
+
* type: "one",
|
|
598
|
+
* from: { table: "invitations", column: "email" },
|
|
599
|
+
* to: { table: "users", column: "email" },
|
|
600
|
+
* foreignKey: false,
|
|
601
|
+
* })
|
|
525
602
|
* ```
|
|
526
603
|
*/
|
|
527
604
|
addReference(referenceName, config) {
|
|
528
605
|
this.#version++;
|
|
529
606
|
const table = this.#tables[config.from.table];
|
|
530
607
|
const referencedTable = this.#tables[config.to.table];
|
|
608
|
+
if (!referenceName || referenceName.trim().length === 0) throw new Error(`referenceName is required for addReference on ${config.from.table}`);
|
|
531
609
|
if (!table) throw new Error(`Table ${config.from.table} not found in schema`);
|
|
532
610
|
if (!referencedTable) throw new Error(`Referenced table ${config.to.table} not found in schema`);
|
|
533
611
|
const columnName = config.from.column;
|
|
534
612
|
const targetColumnName = config.to.column;
|
|
535
|
-
const
|
|
613
|
+
const foreignKey = config.foreignKey !== false;
|
|
536
614
|
const column$1 = table.columns[columnName];
|
|
537
|
-
const
|
|
615
|
+
const targetColumn = referencedTable.columns[targetColumnName];
|
|
538
616
|
if (!column$1) throw new Error(`Column ${columnName} not found in table ${config.from.table}`);
|
|
539
|
-
if (!
|
|
617
|
+
if (!targetColumn) throw new Error(`Column ${targetColumnName} not found in table ${config.to.table}`);
|
|
618
|
+
const actualTargetColumnName = targetColumn.role === "external-id" ? referencedTable.getInternalIdColumn().name : targetColumnName;
|
|
619
|
+
if (!referencedTable.columns[actualTargetColumnName]) throw new Error(`Column ${actualTargetColumnName} not found in table ${config.to.table}`);
|
|
620
|
+
if (table.relations[referenceName]) throw new Error(`Reference ${referenceName} already exists on table ${config.from.table}`);
|
|
540
621
|
if (column$1.role === "reference" && column$1.type !== "bigint") throw new Error(`Reference column ${columnName} must be of type bigint to match internal ID type`);
|
|
541
|
-
|
|
542
|
-
|
|
622
|
+
if (!foreignKey) {
|
|
623
|
+
const missingIndexes = [];
|
|
624
|
+
if (!this.#isJoinColumnIndexed(table, columnName)) missingIndexes.push(`${table.name}.${columnName}`);
|
|
625
|
+
if (!this.#isJoinColumnIndexed(referencedTable, actualTargetColumnName)) missingIndexes.push(`${referencedTable.name}.${actualTargetColumnName}`);
|
|
626
|
+
if (missingIndexes.length > 0) throw new Error(`Join-only relation "${referenceName}" requires indexed join columns: ${missingIndexes.join(", ")}.`);
|
|
627
|
+
}
|
|
628
|
+
const actualFromColumnName = !foreignKey && column$1.role === "external-id" ? table.getInternalIdColumn().name : columnName;
|
|
629
|
+
const init = new ExplicitRelationInit(config.type, referencedTable, table, { foreignKey });
|
|
630
|
+
init.on.push([actualFromColumnName, targetColumnName]);
|
|
543
631
|
const relation = init.init(referenceName);
|
|
544
632
|
table.relations[referenceName] = relation;
|
|
545
633
|
this.#operations.push({
|
|
@@ -550,19 +638,20 @@ var SchemaBuilder = class SchemaBuilder {
|
|
|
550
638
|
type: config.type,
|
|
551
639
|
from: {
|
|
552
640
|
table: config.from.table,
|
|
553
|
-
column:
|
|
641
|
+
column: actualFromColumnName
|
|
554
642
|
},
|
|
555
643
|
to: {
|
|
556
644
|
table: config.to.table,
|
|
557
645
|
column: actualTargetColumnName
|
|
558
|
-
}
|
|
646
|
+
},
|
|
647
|
+
foreignKey
|
|
559
648
|
}
|
|
560
649
|
});
|
|
561
650
|
return this;
|
|
562
651
|
}
|
|
563
652
|
/**
|
|
564
|
-
* Alter an existing table by adding columns or indexes.
|
|
565
|
-
* This is used for
|
|
653
|
+
* Alter an existing table by adding columns, altering columns, or adding indexes.
|
|
654
|
+
* This is used for forward-only schema modifications.
|
|
566
655
|
*
|
|
567
656
|
* @param tableName - The name of the table to modify
|
|
568
657
|
* @param callback - A callback that receives a table builder for adding columns/indexes
|
|
@@ -570,11 +659,12 @@ var SchemaBuilder = class SchemaBuilder {
|
|
|
570
659
|
* @example
|
|
571
660
|
* ```ts
|
|
572
661
|
* // Add a new column to an existing table
|
|
573
|
-
* schema(s => s
|
|
662
|
+
* schema("blog", s => s
|
|
574
663
|
* .addTable("users", t => t
|
|
575
664
|
* .addColumn("id", idColumn())
|
|
576
665
|
* .addColumn("name", column("string")))
|
|
577
666
|
* .alterTable("users", t => t
|
|
667
|
+
* .alterColumn("name").nullable()
|
|
578
668
|
* .addColumn("email", column("string"))
|
|
579
669
|
* .addColumn("age", column("integer").nullable())
|
|
580
670
|
* .createIndex("idx_email", ["email"]))
|
|
@@ -590,6 +680,8 @@ var SchemaBuilder = class SchemaBuilder {
|
|
|
590
680
|
tableBuilder.setIndexes(table.indexes);
|
|
591
681
|
const existingColumns = new Set(Object.keys(table.columns));
|
|
592
682
|
const existingIndexes = new Set(Object.keys(table.indexes));
|
|
683
|
+
const existingColumnState = /* @__PURE__ */ new Map();
|
|
684
|
+
for (const [colName, col] of Object.entries(table.columns)) existingColumnState.set(colName, { isNullable: col.isNullable });
|
|
593
685
|
const resultBuilder = callback(tableBuilder);
|
|
594
686
|
const newTable = resultBuilder.build();
|
|
595
687
|
const subOperations = [];
|
|
@@ -597,14 +689,29 @@ var SchemaBuilder = class SchemaBuilder {
|
|
|
597
689
|
for (const colName of columnOrder) if (!existingColumns.has(colName)) subOperations.push({
|
|
598
690
|
type: "add-column",
|
|
599
691
|
columnName: colName,
|
|
600
|
-
column: newTable.columns[colName]
|
|
601
|
-
});
|
|
602
|
-
for (const idx of resultBuilder.getIndexes()) if (!existingIndexes.has(idx.name)) subOperations.push({
|
|
603
|
-
type: "add-index",
|
|
604
|
-
name: idx.name,
|
|
605
|
-
columns: idx.columns.map((c) => c.ormName),
|
|
606
|
-
unique: idx.unique
|
|
692
|
+
column: cloneColumn(newTable.columns[colName])
|
|
607
693
|
});
|
|
694
|
+
for (const [colName, previousState] of existingColumnState.entries()) {
|
|
695
|
+
const updatedColumn = newTable.columns[colName];
|
|
696
|
+
if (!updatedColumn) continue;
|
|
697
|
+
if (previousState.isNullable !== updatedColumn.isNullable) subOperations.push({
|
|
698
|
+
type: "update-column",
|
|
699
|
+
columnName: colName,
|
|
700
|
+
column: cloneColumn(updatedColumn),
|
|
701
|
+
updateNullable: true,
|
|
702
|
+
updateDefault: false,
|
|
703
|
+
updateDataType: false
|
|
704
|
+
});
|
|
705
|
+
}
|
|
706
|
+
for (const idx of resultBuilder.getIndexes()) if (!existingIndexes.has(idx.name)) {
|
|
707
|
+
if (this.#indexNames.has(idx.name)) throw new Error(`Duplicate index name "${idx.name}" in schema "${this.#name}". Index names must be unique across tables (conflict on "${tableName}").`);
|
|
708
|
+
subOperations.push({
|
|
709
|
+
type: "add-index",
|
|
710
|
+
name: idx.name,
|
|
711
|
+
columns: idx.columns.map((c) => c.name),
|
|
712
|
+
unique: idx.unique
|
|
713
|
+
});
|
|
714
|
+
}
|
|
608
715
|
if (subOperations.length > 0) {
|
|
609
716
|
this.#version++;
|
|
610
717
|
this.#operations.push({
|
|
@@ -614,6 +721,8 @@ var SchemaBuilder = class SchemaBuilder {
|
|
|
614
721
|
});
|
|
615
722
|
}
|
|
616
723
|
this.#tables[tableName] = newTable;
|
|
724
|
+
this.#rebindRelations(tableName, newTable);
|
|
725
|
+
for (const idx of resultBuilder.getIndexes()) if (!existingIndexes.has(idx.name)) this.#indexNames.add(idx.name);
|
|
617
726
|
for (const col of Object.values(newTable.columns)) col.tableName = newTable.name;
|
|
618
727
|
return this;
|
|
619
728
|
}
|
|
@@ -625,6 +734,7 @@ var SchemaBuilder = class SchemaBuilder {
|
|
|
625
734
|
const version = this.#version;
|
|
626
735
|
const tables = this.#tables;
|
|
627
736
|
return {
|
|
737
|
+
name: this.#name,
|
|
628
738
|
version,
|
|
629
739
|
tables,
|
|
630
740
|
operations,
|
|
@@ -639,7 +749,6 @@ var SchemaBuilder = class SchemaBuilder {
|
|
|
639
749
|
else if (col instanceof IdColumn) clonedCol = new IdColumn(col.type);
|
|
640
750
|
else clonedCol = new Column(col.type);
|
|
641
751
|
clonedCol.name = col.name;
|
|
642
|
-
clonedCol.ormName = col.ormName;
|
|
643
752
|
clonedCol.isNullable = col.isNullable;
|
|
644
753
|
clonedCol.role = col.role;
|
|
645
754
|
clonedCol.isHidden = col.isHidden;
|
|
@@ -647,19 +756,24 @@ var SchemaBuilder = class SchemaBuilder {
|
|
|
647
756
|
clonedCol.tableName = col.tableName;
|
|
648
757
|
clonedColumns[colName] = clonedCol;
|
|
649
758
|
}
|
|
650
|
-
|
|
759
|
+
const clonedTable = {
|
|
651
760
|
...v,
|
|
652
761
|
columns: clonedColumns
|
|
653
762
|
};
|
|
763
|
+
clonedTable["~standard"] = createTableStandardSchemaProps(clonedTable, validationClasses);
|
|
764
|
+
clonedTable.validate = createTableValidator(clonedTable, validationClasses);
|
|
765
|
+
cloneTables[k] = clonedTable;
|
|
654
766
|
}
|
|
655
|
-
|
|
767
|
+
const clonedSchema = {
|
|
768
|
+
name: this.#name,
|
|
656
769
|
version,
|
|
657
770
|
tables: cloneTables,
|
|
658
771
|
operations: [...operations],
|
|
659
772
|
clone: () => {
|
|
660
773
|
throw new Error("Cannot clone during clone");
|
|
661
774
|
}
|
|
662
|
-
}
|
|
775
|
+
};
|
|
776
|
+
return new SchemaBuilder(this.#name, clonedSchema).build();
|
|
663
777
|
}
|
|
664
778
|
};
|
|
665
779
|
}
|
|
@@ -673,19 +787,19 @@ var SchemaBuilder = class SchemaBuilder {
|
|
|
673
787
|
/**
|
|
674
788
|
* Create a new schema with callback pattern.
|
|
675
789
|
*/
|
|
676
|
-
function schema(callback) {
|
|
677
|
-
return callback(new SchemaBuilder()).build();
|
|
790
|
+
function schema(name, callback) {
|
|
791
|
+
return callback(new SchemaBuilder(name)).build();
|
|
678
792
|
}
|
|
679
|
-
function compileForeignKey(key
|
|
793
|
+
function compileForeignKey(key) {
|
|
680
794
|
return {
|
|
681
795
|
name: key.name,
|
|
682
|
-
table:
|
|
683
|
-
referencedTable:
|
|
684
|
-
referencedColumns: key.referencedColumns.map((col) =>
|
|
685
|
-
columns: key.columns.map((col) =>
|
|
796
|
+
table: key.table.name,
|
|
797
|
+
referencedTable: key.referencedTable.name,
|
|
798
|
+
referencedColumns: key.referencedColumns.map((col) => col.name),
|
|
799
|
+
columns: key.columns.map((col) => col.name)
|
|
686
800
|
};
|
|
687
801
|
}
|
|
688
802
|
|
|
689
803
|
//#endregion
|
|
690
|
-
export { Column, ExplicitRelationInit, FragnoId, FragnoReference, IdColumn, InternalIdColumn, SchemaBuilder, TableBuilder, VersionColumn, column, compileForeignKey, generateId, idColumn, internalIdColumn, referenceColumn, schema, versionColumn };
|
|
804
|
+
export { Column, ExplicitRelationInit, FragnoDbValidationError, FragnoId, FragnoReference, IdColumn, InternalIdColumn, SchemaBuilder, TableBuilder, VersionColumn, column, compileForeignKey, generateId, idColumn, internalIdColumn, referenceColumn, schema, versionColumn };
|
|
691
805
|
//# sourceMappingURL=create.js.map
|