@fragno-dev/db 0.2.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +202 -140
- package/CHANGELOG.md +35 -0
- package/README.md +30 -9
- package/dist/adapters/adapters.d.ts +23 -21
- package/dist/adapters/adapters.d.ts.map +1 -1
- package/dist/adapters/adapters.js.map +1 -1
- package/dist/adapters/generic-sql/driver-config.d.ts +16 -1
- package/dist/adapters/generic-sql/driver-config.d.ts.map +1 -1
- package/dist/adapters/generic-sql/driver-config.js +23 -1
- package/dist/adapters/generic-sql/driver-config.js.map +1 -1
- package/dist/adapters/generic-sql/generic-sql-adapter.d.ts +27 -9
- package/dist/adapters/generic-sql/generic-sql-adapter.d.ts.map +1 -1
- package/dist/adapters/generic-sql/generic-sql-adapter.js +55 -16
- package/dist/adapters/generic-sql/generic-sql-adapter.js.map +1 -1
- package/dist/adapters/generic-sql/generic-sql-uow-executor.js +129 -3
- package/dist/adapters/generic-sql/generic-sql-uow-executor.js.map +1 -1
- package/dist/adapters/generic-sql/migration/dialect/mysql.js +24 -5
- package/dist/adapters/generic-sql/migration/dialect/mysql.js.map +1 -1
- package/dist/adapters/generic-sql/migration/dialect/postgres.js +6 -5
- package/dist/adapters/generic-sql/migration/dialect/postgres.js.map +1 -1
- package/dist/adapters/generic-sql/migration/dialect/sqlite.js +21 -10
- package/dist/adapters/generic-sql/migration/dialect/sqlite.js.map +1 -1
- package/dist/adapters/generic-sql/migration/prepared-migrations.d.ts.map +1 -1
- package/dist/adapters/generic-sql/migration/prepared-migrations.js +8 -8
- package/dist/adapters/generic-sql/migration/prepared-migrations.js.map +1 -1
- package/dist/adapters/generic-sql/migration/sql-generator.js +74 -51
- package/dist/adapters/generic-sql/migration/sql-generator.js.map +1 -1
- package/dist/adapters/generic-sql/query/create-sql-query-compiler.js +6 -5
- package/dist/adapters/generic-sql/query/create-sql-query-compiler.js.map +1 -1
- package/dist/adapters/generic-sql/query/cursor-utils.js +42 -4
- package/dist/adapters/generic-sql/query/cursor-utils.js.map +1 -1
- package/dist/adapters/generic-sql/query/generic-sql-uow-operation-compiler.js +25 -17
- package/dist/adapters/generic-sql/query/generic-sql-uow-operation-compiler.js.map +1 -1
- package/dist/adapters/generic-sql/query/select-builder.js +5 -3
- package/dist/adapters/generic-sql/query/select-builder.js.map +1 -1
- package/dist/adapters/generic-sql/query/sql-query-compiler.js +15 -12
- package/dist/adapters/generic-sql/query/sql-query-compiler.js.map +1 -1
- package/dist/adapters/generic-sql/query/where-builder.js +39 -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 +7 -3
- package/dist/adapters/generic-sql/uow-decoder.js.map +1 -1
- package/dist/adapters/generic-sql/uow-encoder.js +28 -8
- package/dist/adapters/generic-sql/uow-encoder.js.map +1 -1
- package/dist/adapters/in-memory/condition-evaluator.js +131 -0
- package/dist/adapters/in-memory/condition-evaluator.js.map +1 -0
- package/dist/adapters/in-memory/errors.d.ts +13 -0
- package/dist/adapters/in-memory/errors.d.ts.map +1 -0
- package/dist/adapters/in-memory/errors.js +23 -0
- package/dist/adapters/in-memory/errors.js.map +1 -0
- package/dist/adapters/in-memory/in-memory-adapter.d.ts +27 -0
- package/dist/adapters/in-memory/in-memory-adapter.d.ts.map +1 -0
- package/dist/adapters/in-memory/in-memory-adapter.js +176 -0
- package/dist/adapters/in-memory/in-memory-adapter.js.map +1 -0
- package/dist/adapters/in-memory/in-memory-uow.js +648 -0
- package/dist/adapters/in-memory/in-memory-uow.js.map +1 -0
- package/dist/adapters/in-memory/index.d.ts +4 -0
- package/dist/adapters/in-memory/index.js +4 -0
- package/dist/adapters/in-memory/options.d.ts +28 -0
- package/dist/adapters/in-memory/options.d.ts.map +1 -0
- package/dist/adapters/in-memory/options.js +61 -0
- package/dist/adapters/in-memory/options.js.map +1 -0
- package/dist/adapters/in-memory/reference-resolution.js +26 -0
- package/dist/adapters/in-memory/reference-resolution.js.map +1 -0
- package/dist/adapters/in-memory/sorted-array-index.js +129 -0
- package/dist/adapters/in-memory/sorted-array-index.js.map +1 -0
- package/dist/adapters/in-memory/store.js +71 -0
- package/dist/adapters/in-memory/store.js.map +1 -0
- package/dist/adapters/in-memory/value-comparison.js +28 -0
- package/dist/adapters/in-memory/value-comparison.js.map +1 -0
- package/dist/adapters/shared/from-unit-of-work-compiler.js.map +1 -1
- package/dist/adapters/shared/uow-operation-compiler.js +11 -11
- package/dist/adapters/shared/uow-operation-compiler.js.map +1 -1
- package/dist/adapters/sql/index.d.ts +5 -0
- package/dist/adapters/sql/index.js +4 -0
- package/dist/db-fragment-definition-builder.d.ts +18 -7
- package/dist/db-fragment-definition-builder.d.ts.map +1 -1
- package/dist/db-fragment-definition-builder.js +116 -54
- package/dist/db-fragment-definition-builder.js.map +1 -1
- package/dist/dispatchers/cloudflare-do/index.d.ts +26 -0
- package/dist/dispatchers/cloudflare-do/index.d.ts.map +1 -0
- package/dist/dispatchers/cloudflare-do/index.js +63 -0
- package/dist/dispatchers/cloudflare-do/index.js.map +1 -0
- package/dist/dispatchers/node/index.d.ts +17 -0
- package/dist/dispatchers/node/index.d.ts.map +1 -0
- package/dist/dispatchers/node/index.js +59 -0
- package/dist/dispatchers/node/index.js.map +1 -0
- package/dist/fragments/internal-fragment.d.ts +79 -2
- package/dist/fragments/internal-fragment.d.ts.map +1 -1
- package/dist/fragments/internal-fragment.js +150 -32
- package/dist/fragments/internal-fragment.js.map +1 -1
- package/dist/fragments/internal-fragment.routes.js +29 -0
- package/dist/fragments/internal-fragment.routes.js.map +1 -0
- package/dist/fragments/internal-fragment.schema.d.ts +9 -0
- package/dist/fragments/internal-fragment.schema.d.ts.map +1 -0
- package/dist/fragments/internal-fragment.schema.js +22 -0
- package/dist/fragments/internal-fragment.schema.js.map +1 -0
- package/dist/hooks/durable-hooks-processor.d.ts +14 -0
- package/dist/hooks/durable-hooks-processor.d.ts.map +1 -0
- package/dist/hooks/durable-hooks-processor.js +32 -0
- package/dist/hooks/durable-hooks-processor.js.map +1 -0
- package/dist/hooks/hooks.d.ts +42 -1
- package/dist/hooks/hooks.d.ts.map +1 -1
- package/dist/hooks/hooks.js +72 -6
- package/dist/hooks/hooks.js.map +1 -1
- package/dist/migration-engine/auto-from-schema.js +14 -11
- package/dist/migration-engine/auto-from-schema.js.map +1 -1
- package/dist/migration-engine/generation-engine.d.ts +16 -10
- package/dist/migration-engine/generation-engine.d.ts.map +1 -1
- package/dist/migration-engine/generation-engine.js +72 -33
- package/dist/migration-engine/generation-engine.js.map +1 -1
- package/dist/migration-engine/shared.js.map +1 -1
- package/dist/mod.d.ts +15 -8
- package/dist/mod.d.ts.map +1 -1
- package/dist/mod.js +14 -8
- package/dist/mod.js.map +1 -1
- package/dist/naming/sql-naming.d.ts +19 -0
- package/dist/naming/sql-naming.d.ts.map +1 -0
- package/dist/naming/sql-naming.js +116 -0
- package/dist/naming/sql-naming.js.map +1 -0
- package/dist/node_modules/.pnpm/{rou3@0.7.10 → rou3@0.7.12}/node_modules/rou3/dist/index.js +8 -5
- package/dist/node_modules/.pnpm/rou3@0.7.12/node_modules/rou3/dist/index.js.map +1 -0
- package/dist/outbox/outbox-builder.js +156 -0
- package/dist/outbox/outbox-builder.js.map +1 -0
- package/dist/outbox/outbox.d.ts +52 -0
- package/dist/outbox/outbox.d.ts.map +1 -0
- package/dist/outbox/outbox.js +37 -0
- package/dist/outbox/outbox.js.map +1 -0
- package/dist/packages/fragno/dist/api/fragment-definition-builder.js +3 -2
- package/dist/packages/fragno/dist/api/fragment-definition-builder.js.map +1 -1
- package/dist/packages/fragno/dist/api/fragment-instantiator.js +164 -20
- package/dist/packages/fragno/dist/api/fragment-instantiator.js.map +1 -1
- package/dist/packages/fragno/dist/api/request-input-context.js +67 -0
- package/dist/packages/fragno/dist/api/request-input-context.js.map +1 -1
- package/dist/packages/fragno/dist/api/route.js +14 -1
- package/dist/packages/fragno/dist/api/route.js.map +1 -1
- package/dist/packages/fragno/dist/internal/trace-context.js +12 -0
- package/dist/packages/fragno/dist/internal/trace-context.js.map +1 -0
- package/dist/query/column-defaults.js +20 -4
- package/dist/query/column-defaults.js.map +1 -1
- package/dist/query/cursor.d.ts +3 -1
- package/dist/query/cursor.d.ts.map +1 -1
- package/dist/query/cursor.js +45 -14
- package/dist/query/cursor.js.map +1 -1
- package/dist/query/db-now.d.ts +8 -0
- package/dist/query/db-now.d.ts.map +1 -0
- package/dist/query/db-now.js +7 -0
- package/dist/query/db-now.js.map +1 -0
- package/dist/query/serialize/create-sql-serializer.js +3 -2
- package/dist/query/serialize/create-sql-serializer.js.map +1 -1
- package/dist/query/serialize/dialect/mysql-serializer.js +12 -6
- package/dist/query/serialize/dialect/mysql-serializer.js.map +1 -1
- package/dist/query/serialize/dialect/postgres-serializer.js +25 -7
- package/dist/query/serialize/dialect/postgres-serializer.js.map +1 -1
- package/dist/query/serialize/dialect/sqlite-serializer.js +55 -11
- package/dist/query/serialize/dialect/sqlite-serializer.js.map +1 -1
- package/dist/query/serialize/sql-serializer.js +2 -2
- package/dist/query/serialize/sql-serializer.js.map +1 -1
- package/dist/query/simple-query-interface.d.ts +6 -1
- package/dist/query/simple-query-interface.d.ts.map +1 -1
- package/dist/query/unit-of-work/execute-unit-of-work.d.ts.map +1 -1
- package/dist/query/unit-of-work/execute-unit-of-work.js +11 -6
- 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 +50 -14
- package/dist/query/unit-of-work/unit-of-work.d.ts.map +1 -1
- package/dist/query/unit-of-work/unit-of-work.js +86 -5
- package/dist/query/unit-of-work/unit-of-work.js.map +1 -1
- package/dist/query/value-decoding.js +9 -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 +38 -14
- package/dist/schema/create.d.ts.map +1 -1
- package/dist/schema/create.js +81 -42
- 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 +3 -2
- package/dist/schema/type-conversion/create-sql-type-mapper.js.map +1 -1
- package/dist/schema/type-conversion/dialect/sqlite.js +9 -0
- package/dist/schema/type-conversion/dialect/sqlite.js.map +1 -1
- package/dist/schema/validator.d.ts +10 -0
- package/dist/schema/validator.d.ts.map +1 -0
- package/dist/schema/validator.js +123 -0
- package/dist/schema/validator.js.map +1 -0
- package/dist/schema-output/drizzle.d.ts +30 -0
- package/dist/schema-output/drizzle.d.ts.map +1 -0
- package/dist/{adapters/drizzle/generate.js → schema-output/drizzle.js} +82 -56
- package/dist/schema-output/drizzle.js.map +1 -0
- package/dist/schema-output/prisma.d.ts +17 -0
- package/dist/schema-output/prisma.d.ts.map +1 -0
- package/dist/schema-output/prisma.js +296 -0
- package/dist/schema-output/prisma.js.map +1 -0
- package/dist/util/default-database-adapter.js +61 -0
- package/dist/util/default-database-adapter.js.map +1 -0
- package/dist/with-database.d.ts +1 -1
- package/dist/with-database.d.ts.map +1 -1
- package/dist/with-database.js +12 -3
- package/dist/with-database.js.map +1 -1
- package/package.json +43 -28
- package/src/adapters/adapters.ts +30 -24
- package/src/adapters/drizzle/migrate-drizzle.test.ts +54 -33
- package/src/adapters/drizzle/migration-parity-drizzle-kit.test.ts +599 -0
- package/src/adapters/drizzle/test-utils.ts +12 -8
- package/src/adapters/generic-sql/driver-config.ts +38 -0
- package/src/adapters/generic-sql/generic-sql-adapter.test.ts +5 -5
- package/src/adapters/generic-sql/generic-sql-adapter.ts +110 -24
- package/src/adapters/generic-sql/generic-sql-uow-executor.test.ts +54 -0
- package/src/adapters/generic-sql/generic-sql-uow-executor.ts +231 -3
- package/src/adapters/generic-sql/migration/adapter-migration-parity.test.ts +118 -0
- package/src/adapters/generic-sql/migration/dialect/mysql.test.ts +26 -8
- package/src/adapters/generic-sql/migration/dialect/mysql.ts +46 -8
- package/src/adapters/generic-sql/migration/dialect/postgres.test.ts +25 -7
- package/src/adapters/generic-sql/migration/dialect/postgres.ts +8 -4
- package/src/adapters/generic-sql/migration/dialect/sqlite.test.ts +47 -8
- package/src/adapters/generic-sql/migration/dialect/sqlite.ts +27 -12
- package/src/adapters/generic-sql/migration/prepared-migrations.test.ts +128 -39
- package/src/adapters/generic-sql/migration/prepared-migrations.ts +15 -8
- package/src/adapters/generic-sql/migration/sql-generator.ts +142 -65
- package/src/adapters/generic-sql/query/create-sql-query-compiler.ts +9 -6
- package/src/adapters/generic-sql/query/cursor-utils.test.ts +271 -0
- package/src/adapters/generic-sql/query/cursor-utils.ts +41 -6
- package/src/adapters/generic-sql/query/generic-sql-uow-operation-compiler.test.ts +27 -27
- package/src/adapters/generic-sql/query/generic-sql-uow-operation-compiler.ts +38 -24
- package/src/adapters/generic-sql/query/select-builder.test.ts +15 -11
- package/src/adapters/generic-sql/query/select-builder.ts +6 -2
- package/src/adapters/generic-sql/query/sql-query-compiler.test.ts +52 -2
- package/src/adapters/generic-sql/query/sql-query-compiler.ts +50 -15
- package/src/adapters/generic-sql/query/where-builder.test.ts +91 -17
- package/src/adapters/generic-sql/query/where-builder.ts +90 -38
- package/src/adapters/{kysely/kysely-adapter-pglite.test.ts → generic-sql/sql-adapter-pglite-migrations.test.ts} +6 -6
- package/src/adapters/generic-sql/sql-adapter-pglite-pagination.test.ts +806 -0
- package/src/adapters/{drizzle/drizzle-adapter-pglite.test.ts → generic-sql/sql-adapter-pglite-queries.test.ts} +11 -11
- package/src/adapters/generic-sql/{test/generic-drizzle-adapter-sqlite3.test.ts → sql-adapter-sqlite3-driver.test.ts} +10 -10
- package/src/adapters/{drizzle/drizzle-adapter-sqlite3.test.ts → generic-sql/sql-adapter-sqlite3-uow.test.ts} +7 -7
- package/src/adapters/{kysely/kysely-adapter-sqlocal.test.ts → generic-sql/sql-adapter-sqlocal.test.ts} +6 -6
- package/src/adapters/generic-sql/sqlite-storage.ts +20 -0
- package/src/adapters/generic-sql/uow-decoder.test.ts +1 -1
- package/src/adapters/generic-sql/uow-decoder.ts +21 -3
- package/src/adapters/generic-sql/uow-encoder.test.ts +33 -2
- package/src/adapters/generic-sql/uow-encoder.ts +50 -11
- package/src/adapters/in-memory/condition-evaluator.test.ts +193 -0
- package/src/adapters/in-memory/condition-evaluator.ts +275 -0
- package/src/adapters/in-memory/errors.ts +20 -0
- package/src/adapters/in-memory/in-memory-adapter.ts +277 -0
- package/src/adapters/in-memory/in-memory-uow.mutations.test.ts +296 -0
- package/src/adapters/in-memory/in-memory-uow.retrieval.test.ts +100 -0
- package/src/adapters/in-memory/in-memory-uow.ts +1348 -0
- package/src/adapters/in-memory/index.ts +3 -0
- package/src/adapters/in-memory/options.test.ts +41 -0
- package/src/adapters/in-memory/options.ts +87 -0
- package/src/adapters/in-memory/reference-resolution.test.ts +50 -0
- package/src/adapters/in-memory/reference-resolution.ts +67 -0
- package/src/adapters/in-memory/sorted-array-index.test.ts +123 -0
- package/src/adapters/in-memory/sorted-array-index.ts +228 -0
- package/src/adapters/in-memory/store.test.ts +68 -0
- package/src/adapters/in-memory/store.ts +145 -0
- package/src/adapters/in-memory/value-comparison.ts +53 -0
- package/src/adapters/in-memory/value-normalization.test.ts +57 -0
- package/src/adapters/prisma/prisma-adapter-sqlite3.test.ts +1163 -0
- package/src/adapters/shared/from-unit-of-work-compiler.ts +3 -1
- package/src/adapters/shared/uow-operation-compiler.ts +26 -16
- package/src/adapters/sql/index.ts +12 -0
- package/src/db-fragment-definition-builder.test.ts +30 -12
- package/src/db-fragment-definition-builder.ts +142 -73
- package/src/db-fragment-instantiator.test.ts +105 -13
- package/src/db-fragment-integration.test.ts +9 -7
- package/src/dispatchers/cloudflare-do/index.test.ts +73 -0
- package/src/dispatchers/cloudflare-do/index.ts +104 -0
- package/src/dispatchers/node/index.test.ts +91 -0
- package/src/dispatchers/node/index.ts +87 -0
- package/src/fragments/internal-fragment.routes.ts +42 -0
- package/src/fragments/internal-fragment.schema.ts +51 -0
- package/src/fragments/internal-fragment.test.ts +458 -8
- package/src/fragments/internal-fragment.ts +322 -63
- package/src/hooks/durable-hooks-processor.test.ts +117 -0
- package/src/hooks/durable-hooks-processor.ts +67 -0
- package/src/hooks/hooks.test.ts +165 -5
- package/src/hooks/hooks.ts +197 -9
- package/src/migration-engine/auto-from-schema.test.ts +14 -14
- package/src/migration-engine/auto-from-schema.ts +5 -2
- package/src/migration-engine/create.test.ts +2 -2
- package/src/migration-engine/generation-engine.test.ts +229 -104
- package/src/migration-engine/generation-engine.ts +94 -64
- package/src/migration-engine/shared.ts +1 -0
- package/src/mod.ts +64 -26
- package/src/naming/sql-naming.ts +180 -0
- package/src/outbox/outbox-builder.ts +241 -0
- package/src/outbox/outbox.test.ts +253 -0
- package/src/outbox/outbox.ts +137 -0
- package/src/query/column-defaults.ts +41 -3
- package/src/query/condition-builder.test.ts +3 -3
- package/src/query/cursor.test.ts +116 -18
- package/src/query/cursor.ts +75 -26
- package/src/query/db-now.ts +6 -0
- package/src/query/query-type.test.ts +2 -2
- package/src/query/serialize/create-sql-serializer.ts +7 -2
- package/src/query/serialize/dialect/mysql-serializer.ts +12 -4
- package/src/query/serialize/dialect/postgres-serializer.ts +34 -4
- package/src/query/serialize/dialect/sqlite-serializer.test.ts +51 -1
- package/src/query/serialize/dialect/sqlite-serializer.ts +92 -9
- package/src/query/serialize/sql-serializer.ts +4 -4
- package/src/query/simple-query-interface.ts +5 -0
- package/src/query/unit-of-work/execute-unit-of-work.test.ts +25 -1
- package/src/query/unit-of-work/execute-unit-of-work.ts +25 -8
- package/src/query/unit-of-work/unit-of-work-coordinator.test.ts +12 -12
- package/src/query/unit-of-work/unit-of-work-types.test.ts +1 -1
- package/src/query/unit-of-work/unit-of-work.test.ts +168 -37
- package/src/query/unit-of-work/unit-of-work.ts +203 -18
- package/src/query/value-decoding.test.ts +13 -2
- package/src/query/value-decoding.ts +17 -4
- package/src/query/value-encoding.test.ts +85 -2
- package/src/query/value-encoding.ts +56 -6
- package/src/schema/create.test.ts +129 -42
- package/src/schema/create.ts +185 -47
- package/src/schema/generate-id.test.ts +2 -2
- package/src/schema/generate-id.ts +2 -2
- package/src/schema/serialize.test.ts +14 -2
- package/src/schema/type-conversion/create-sql-type-mapper.ts +7 -2
- package/src/schema/type-conversion/dialect/sqlite.ts +18 -0
- package/src/schema/type-conversion/type-mapping.test.ts +25 -1
- package/src/schema/validator.test.ts +197 -0
- package/src/schema/validator.ts +231 -0
- package/src/{adapters/drizzle/generate.test.ts → schema-output/drizzle.test.ts} +179 -129
- package/src/{adapters/drizzle/generate.ts → schema-output/drizzle.ts} +143 -93
- package/src/schema-output/prisma.test.ts +536 -0
- package/src/schema-output/prisma.ts +573 -0
- package/src/util/default-database-adapter.ts +106 -0
- package/src/with-database.ts +22 -3
- package/tsdown.config.ts +6 -4
- package/dist/adapters/drizzle/drizzle-adapter.d.ts +0 -20
- package/dist/adapters/drizzle/drizzle-adapter.d.ts.map +0 -1
- package/dist/adapters/drizzle/drizzle-adapter.js +0 -27
- package/dist/adapters/drizzle/drizzle-adapter.js.map +0 -1
- package/dist/adapters/drizzle/generate.d.ts +0 -30
- package/dist/adapters/drizzle/generate.d.ts.map +0 -1
- package/dist/adapters/drizzle/generate.js.map +0 -1
- package/dist/adapters/kysely/kysely-adapter.d.ts +0 -19
- package/dist/adapters/kysely/kysely-adapter.d.ts.map +0 -1
- package/dist/adapters/kysely/kysely-adapter.js +0 -17
- package/dist/adapters/kysely/kysely-adapter.js.map +0 -1
- package/dist/adapters/shared/table-name-mapper.d.ts +0 -12
- package/dist/adapters/shared/table-name-mapper.d.ts.map +0 -1
- package/dist/adapters/shared/table-name-mapper.js +0 -43
- package/dist/adapters/shared/table-name-mapper.js.map +0 -1
- package/dist/node_modules/.pnpm/rou3@0.7.10/node_modules/rou3/dist/index.js.map +0 -1
- package/dist/schema-generator/schema-generator.d.ts +0 -15
- package/dist/schema-generator/schema-generator.d.ts.map +0 -1
- package/src/adapters/drizzle/drizzle-adapter.ts +0 -39
- package/src/adapters/kysely/kysely-adapter.ts +0 -27
- package/src/adapters/shared/table-name-mapper.ts +0 -50
- package/src/schema-generator/schema-generator.ts +0 -12
|
@@ -1,20 +1,25 @@
|
|
|
1
|
-
import { importGenerator } from "
|
|
2
|
-
import { ident, parseVarchar } from "
|
|
1
|
+
import { importGenerator } from "../util/import-generator";
|
|
2
|
+
import { ident, parseVarchar } from "../util/parse";
|
|
3
3
|
import {
|
|
4
4
|
type AnyColumn,
|
|
5
5
|
type AnySchema,
|
|
6
6
|
type AnyTable,
|
|
7
7
|
type Relation,
|
|
8
8
|
InternalIdColumn,
|
|
9
|
-
} from "
|
|
10
|
-
import type { SQLProvider } from "../../shared/providers";
|
|
9
|
+
} from "../schema/create";
|
|
11
10
|
import {
|
|
12
|
-
|
|
11
|
+
createNamingResolver,
|
|
13
12
|
sanitizeNamespace,
|
|
14
|
-
type
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
import {
|
|
13
|
+
type NamingResolver,
|
|
14
|
+
type SqlNamingStrategy,
|
|
15
|
+
} from "../naming/sql-naming";
|
|
16
|
+
import { internalSchema } from "../fragments/internal-fragment.schema";
|
|
17
|
+
import { type DatabaseTypeLiteral } from "../schema/type-conversion/type-mapping";
|
|
18
|
+
import { createSQLTypeMapper } from "../schema/type-conversion/create-sql-type-mapper";
|
|
19
|
+
import {
|
|
20
|
+
defaultNamingStrategyForDatabase,
|
|
21
|
+
type SupportedDatabase,
|
|
22
|
+
} from "../adapters/generic-sql/driver-config";
|
|
18
23
|
|
|
19
24
|
// ============================================================================
|
|
20
25
|
// PROVIDER CONFIGURATION
|
|
@@ -32,7 +37,7 @@ const PROVIDER_TABLE_FUNCTIONS = {
|
|
|
32
37
|
sqlite: "sqliteTable",
|
|
33
38
|
} as const;
|
|
34
39
|
|
|
35
|
-
export type SupportedProvider =
|
|
40
|
+
export type SupportedProvider = SupportedDatabase;
|
|
36
41
|
|
|
37
42
|
// ============================================================================
|
|
38
43
|
// CONTEXT
|
|
@@ -47,7 +52,7 @@ interface GeneratorContext {
|
|
|
47
52
|
}
|
|
48
53
|
|
|
49
54
|
function createContext(
|
|
50
|
-
provider:
|
|
55
|
+
provider: SupportedDatabase,
|
|
51
56
|
idGeneratorImport?: { name: string; from: string },
|
|
52
57
|
): GeneratorContext {
|
|
53
58
|
return {
|
|
@@ -224,7 +229,7 @@ function mapDBTypeToDrizzleFunction(
|
|
|
224
229
|
case "text":
|
|
225
230
|
// Check if it's JSON
|
|
226
231
|
if (column.type === "json") {
|
|
227
|
-
return { name: "
|
|
232
|
+
return { name: "text", params: [`{ mode: "json" }`] };
|
|
228
233
|
}
|
|
229
234
|
return { name: "text" };
|
|
230
235
|
case "real":
|
|
@@ -243,17 +248,10 @@ function mapDBTypeToDrizzleFunction(
|
|
|
243
248
|
// ============================================================================
|
|
244
249
|
|
|
245
250
|
/**
|
|
246
|
-
* Get the physical table name
|
|
251
|
+
* Get the physical table name using the naming resolver if available
|
|
247
252
|
*/
|
|
248
|
-
function getPhysicalTableName(
|
|
249
|
-
logicalName:
|
|
250
|
-
namespace: string | undefined,
|
|
251
|
-
mapper: TableNameMapper | undefined,
|
|
252
|
-
): string {
|
|
253
|
-
if (!namespace) {
|
|
254
|
-
return logicalName;
|
|
255
|
-
}
|
|
256
|
-
return mapper ? mapper.toPhysical(logicalName) : `${logicalName}_${sanitizeNamespace(namespace)}`;
|
|
253
|
+
function getPhysicalTableName(logicalName: string, resolver?: NamingResolver): string {
|
|
254
|
+
return resolver ? resolver.getTableName(logicalName) : logicalName;
|
|
257
255
|
}
|
|
258
256
|
|
|
259
257
|
// ============================================================================
|
|
@@ -264,12 +262,13 @@ function generateColumnDefinition(
|
|
|
264
262
|
ctx: GeneratorContext,
|
|
265
263
|
column: AnyColumn,
|
|
266
264
|
customTypes: string[],
|
|
265
|
+
physicalColumnName: string,
|
|
267
266
|
): string {
|
|
268
267
|
const parts: string[] = [];
|
|
269
268
|
const typeFn = getColumnTypeFunction(ctx, column, customTypes);
|
|
270
269
|
|
|
271
270
|
// Column type with parameters
|
|
272
|
-
const params: string[] = [`"${
|
|
271
|
+
const params: string[] = [`"${physicalColumnName}"`, ...(typeFn.params ?? [])];
|
|
273
272
|
if (!typeFn.isCustomType) {
|
|
274
273
|
ctx.imports.addImport(typeFn.name, ctx.importSource);
|
|
275
274
|
}
|
|
@@ -295,6 +294,11 @@ function generateColumnDefinition(
|
|
|
295
294
|
parts.push("notNull()");
|
|
296
295
|
}
|
|
297
296
|
|
|
297
|
+
// External IDs are unique by definition in Fragno's SQL migrations.
|
|
298
|
+
if (column.role === "external-id") {
|
|
299
|
+
parts.push("unique()");
|
|
300
|
+
}
|
|
301
|
+
|
|
298
302
|
// Default values
|
|
299
303
|
if (column.default) {
|
|
300
304
|
if ("value" in column.default) {
|
|
@@ -310,7 +314,12 @@ function generateColumnDefinition(
|
|
|
310
314
|
} else if ("dbSpecial" in column.default) {
|
|
311
315
|
// Database-level special functions: defaultTo(b => b.now())
|
|
312
316
|
if (column.default.dbSpecial === "now") {
|
|
313
|
-
|
|
317
|
+
if (ctx.provider === "mysql") {
|
|
318
|
+
ctx.imports.addImport("sql", "drizzle-orm");
|
|
319
|
+
parts.push("default(sql`(now())`)");
|
|
320
|
+
} else {
|
|
321
|
+
parts.push("defaultNow()");
|
|
322
|
+
}
|
|
314
323
|
}
|
|
315
324
|
} else if ("runtime" in column.default) {
|
|
316
325
|
// Runtime defaults: defaultTo$()
|
|
@@ -326,16 +335,22 @@ function generateColumnDefinition(
|
|
|
326
335
|
}
|
|
327
336
|
}
|
|
328
337
|
|
|
329
|
-
return ` ${column.
|
|
338
|
+
return ` ${column.name}: ${parts.join(".")}`;
|
|
330
339
|
}
|
|
331
340
|
|
|
332
341
|
function generateAllColumns(
|
|
333
342
|
ctx: GeneratorContext,
|
|
334
343
|
table: AnyTable,
|
|
335
344
|
customTypes: string[],
|
|
345
|
+
resolver?: NamingResolver,
|
|
336
346
|
): string[] {
|
|
337
347
|
return Object.values(table.columns).map((column) =>
|
|
338
|
-
generateColumnDefinition(
|
|
348
|
+
generateColumnDefinition(
|
|
349
|
+
ctx,
|
|
350
|
+
column,
|
|
351
|
+
customTypes,
|
|
352
|
+
resolver ? resolver.getColumnName(table.name, column.name) : column.name,
|
|
353
|
+
),
|
|
339
354
|
);
|
|
340
355
|
}
|
|
341
356
|
|
|
@@ -346,8 +361,8 @@ function generateAllColumns(
|
|
|
346
361
|
function generateForeignKeys(
|
|
347
362
|
ctx: GeneratorContext,
|
|
348
363
|
table: AnyTable,
|
|
349
|
-
namespace?: string,
|
|
350
|
-
|
|
364
|
+
namespace?: string | null,
|
|
365
|
+
resolver?: NamingResolver,
|
|
351
366
|
): string[] {
|
|
352
367
|
const keys: string[] = [];
|
|
353
368
|
|
|
@@ -360,7 +375,7 @@ function generateForeignKeys(
|
|
|
360
375
|
|
|
361
376
|
const columns: string[] = [];
|
|
362
377
|
const foreignColumns: string[] = [];
|
|
363
|
-
const isSelfReference = relation.table.
|
|
378
|
+
const isSelfReference = relation.table.name === table.name;
|
|
364
379
|
|
|
365
380
|
for (const [localCol, refCol] of relation.on) {
|
|
366
381
|
columns.push(`table.${localCol}`);
|
|
@@ -372,18 +387,21 @@ function generateForeignKeys(
|
|
|
372
387
|
} else {
|
|
373
388
|
// Use sanitized TypeScript export name for identifier reference
|
|
374
389
|
const foreignTableRef = namespace
|
|
375
|
-
? `${relation.table.
|
|
376
|
-
: relation.table.
|
|
390
|
+
? `${relation.table.name}_${sanitizeNamespace(namespace)}`
|
|
391
|
+
: relation.table.name;
|
|
377
392
|
foreignColumns.push(`${foreignTableRef}.${actualRefCol}`);
|
|
378
393
|
}
|
|
379
394
|
}
|
|
380
395
|
|
|
381
396
|
ctx.imports.addImport("foreignKey", ctx.importSource);
|
|
382
397
|
// Include namespace in FK name to avoid collisions
|
|
383
|
-
const fkName =
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
398
|
+
const fkName = resolver
|
|
399
|
+
? resolver.getForeignKeyName({
|
|
400
|
+
logicalTable: table.name,
|
|
401
|
+
logicalReferencedTable: relation.table.name,
|
|
402
|
+
referenceName: relation.name,
|
|
403
|
+
})
|
|
404
|
+
: `${table.name}_${relation.table.name}_${relation.name}_fk`;
|
|
387
405
|
|
|
388
406
|
keys.push(`foreignKey({
|
|
389
407
|
columns: [${columns.join(", ")}],
|
|
@@ -395,14 +413,24 @@ function generateForeignKeys(
|
|
|
395
413
|
return keys;
|
|
396
414
|
}
|
|
397
415
|
|
|
398
|
-
function generateIndexes(
|
|
416
|
+
function generateIndexes(
|
|
417
|
+
ctx: GeneratorContext,
|
|
418
|
+
table: AnyTable,
|
|
419
|
+
namespace?: string | null,
|
|
420
|
+
resolver?: NamingResolver,
|
|
421
|
+
): string[] {
|
|
399
422
|
const indexes: string[] = [];
|
|
400
423
|
|
|
401
424
|
for (const idx of Object.values(table.indexes)) {
|
|
402
|
-
const columns = idx.columns.map((col) => `table.${col.
|
|
425
|
+
const columns = idx.columns.map((col) => `table.${col.name}`).join(", ");
|
|
403
426
|
|
|
404
|
-
|
|
405
|
-
|
|
427
|
+
const indexName = resolver
|
|
428
|
+
? idx.unique
|
|
429
|
+
? resolver.getUniqueIndexName(idx.name, table.name)
|
|
430
|
+
: resolver.getIndexName(idx.name, table.name)
|
|
431
|
+
: namespace
|
|
432
|
+
? `${idx.name}_${namespace}`
|
|
433
|
+
: idx.name;
|
|
406
434
|
|
|
407
435
|
if (idx.unique) {
|
|
408
436
|
ctx.imports.addImport("uniqueIndex", ctx.importSource);
|
|
@@ -419,13 +447,30 @@ function generateIndexes(ctx: GeneratorContext, table: AnyTable, namespace?: str
|
|
|
419
447
|
function generateTableConstraints(
|
|
420
448
|
ctx: GeneratorContext,
|
|
421
449
|
table: AnyTable,
|
|
422
|
-
namespace?: string,
|
|
423
|
-
|
|
450
|
+
namespace?: string | null,
|
|
451
|
+
resolver?: NamingResolver,
|
|
424
452
|
): string[] {
|
|
425
|
-
|
|
426
|
-
...generateForeignKeys(ctx, table, namespace,
|
|
427
|
-
...generateIndexes(ctx, table, namespace),
|
|
453
|
+
const constraints: string[] = [
|
|
454
|
+
...generateForeignKeys(ctx, table, namespace, resolver),
|
|
455
|
+
...generateIndexes(ctx, table, namespace, resolver),
|
|
428
456
|
];
|
|
457
|
+
|
|
458
|
+
if (ctx.provider === "sqlite") {
|
|
459
|
+
const externalIdColumn = Object.values(table.columns).find(
|
|
460
|
+
(column) => column.role === "external-id",
|
|
461
|
+
);
|
|
462
|
+
if (externalIdColumn) {
|
|
463
|
+
const indexName = resolver
|
|
464
|
+
? resolver.getUniqueIndexName(`idx_${table.name}_external_id`, table.name)
|
|
465
|
+
: namespace
|
|
466
|
+
? `idx_${table.name}_external_id_${namespace}`
|
|
467
|
+
: `idx_${table.name}_external_id`;
|
|
468
|
+
ctx.imports.addImport("uniqueIndex", ctx.importSource);
|
|
469
|
+
constraints.push(`uniqueIndex("${indexName}").on(table.${externalIdColumn.name})`);
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
return constraints;
|
|
429
474
|
}
|
|
430
475
|
|
|
431
476
|
// ============================================================================
|
|
@@ -436,19 +481,22 @@ function generateTable(
|
|
|
436
481
|
ctx: GeneratorContext,
|
|
437
482
|
table: AnyTable,
|
|
438
483
|
customTypes: string[],
|
|
439
|
-
namespace?: string,
|
|
440
|
-
|
|
484
|
+
namespace?: string | null,
|
|
485
|
+
resolver?: NamingResolver,
|
|
486
|
+
schemaRef?: string,
|
|
441
487
|
): string {
|
|
442
|
-
const tableFn = PROVIDER_TABLE_FUNCTIONS[ctx.provider];
|
|
443
|
-
|
|
488
|
+
const tableFn = schemaRef ? `${schemaRef}.table` : PROVIDER_TABLE_FUNCTIONS[ctx.provider];
|
|
489
|
+
if (!schemaRef) {
|
|
490
|
+
ctx.imports.addImport(tableFn, ctx.importSource);
|
|
491
|
+
}
|
|
444
492
|
|
|
445
|
-
const columns = generateAllColumns(ctx, table, customTypes);
|
|
446
|
-
const constraints = generateTableConstraints(ctx, table, namespace,
|
|
493
|
+
const columns = generateAllColumns(ctx, table, customTypes, resolver);
|
|
494
|
+
const constraints = generateTableConstraints(ctx, table, namespace, resolver);
|
|
447
495
|
|
|
448
496
|
// Physical table name in the database (respects mapper configuration)
|
|
449
|
-
const physicalTableName = getPhysicalTableName(table.
|
|
497
|
+
const physicalTableName = getPhysicalTableName(table.name, resolver);
|
|
450
498
|
// TypeScript export name must always be sanitized to be a valid JavaScript identifier
|
|
451
|
-
const exportName = namespace ? `${table.
|
|
499
|
+
const exportName = namespace ? `${table.name}_${sanitizeNamespace(namespace)}` : table.name;
|
|
452
500
|
|
|
453
501
|
const args: string[] = [`"${physicalTableName}"`, `{\n${columns.join(",\n")}\n}`];
|
|
454
502
|
|
|
@@ -466,9 +514,9 @@ function generateTable(
|
|
|
466
514
|
function generateRelation(
|
|
467
515
|
ctx: GeneratorContext,
|
|
468
516
|
table: AnyTable,
|
|
469
|
-
namespace?: string,
|
|
517
|
+
namespace?: string | null,
|
|
470
518
|
inverseRelations?: Array<{ fromTable: AnyTable; relation: Relation }>,
|
|
471
|
-
|
|
519
|
+
_resolver?: NamingResolver,
|
|
472
520
|
): string | undefined {
|
|
473
521
|
const relations: string[] = [];
|
|
474
522
|
let hasOne = false;
|
|
@@ -491,12 +539,10 @@ function generateRelation(
|
|
|
491
539
|
const references: string[] = [];
|
|
492
540
|
|
|
493
541
|
// Use sanitized TypeScript export names for identifier references
|
|
494
|
-
const tableRef = namespace
|
|
495
|
-
? `${table.ormName}_${sanitizeNamespace(namespace)}`
|
|
496
|
-
: table.ormName;
|
|
542
|
+
const tableRef = namespace ? `${table.name}_${sanitizeNamespace(namespace)}` : table.name;
|
|
497
543
|
const relatedTableRef = namespace
|
|
498
|
-
? `${relation.table.
|
|
499
|
-
: relation.table.
|
|
544
|
+
? `${relation.table.name}_${sanitizeNamespace(namespace)}`
|
|
545
|
+
: relation.table.name;
|
|
500
546
|
|
|
501
547
|
for (const [left, right] of relation.on) {
|
|
502
548
|
fields.push(`${tableRef}.${left}`);
|
|
@@ -509,8 +555,8 @@ function generateRelation(
|
|
|
509
555
|
}
|
|
510
556
|
|
|
511
557
|
const relatedTableRef = namespace
|
|
512
|
-
? `${relation.table.
|
|
513
|
-
: relation.table.
|
|
558
|
+
? `${relation.table.name}_${sanitizeNamespace(namespace)}`
|
|
559
|
+
: relation.table.name;
|
|
514
560
|
|
|
515
561
|
const args: string[] = [relatedTableRef];
|
|
516
562
|
if (options.length > 0) {
|
|
@@ -530,12 +576,12 @@ function generateRelation(
|
|
|
530
576
|
|
|
531
577
|
// Use sanitized TypeScript export name for identifier reference
|
|
532
578
|
const fromTableRef = namespace
|
|
533
|
-
? `${fromTable.
|
|
534
|
-
: fromTable.
|
|
579
|
+
? `${fromTable.name}_${sanitizeNamespace(namespace)}`
|
|
580
|
+
: fromTable.name;
|
|
535
581
|
|
|
536
582
|
// Generate inverse relation name with consistent suffix
|
|
537
583
|
// e.g., if session has "sessionOwner" relation to user, user gets "sessionList" inverse relation
|
|
538
|
-
const inverseRelationName = `${fromTable.
|
|
584
|
+
const inverseRelationName = `${fromTable.name}List`;
|
|
539
585
|
|
|
540
586
|
const options: string[] = [`relationName: "${relation.id}"`];
|
|
541
587
|
const args: string[] = [fromTableRef, `{\n${ident(options.join(",\n"))}\n}`];
|
|
@@ -560,10 +606,8 @@ function generateRelation(
|
|
|
560
606
|
const relationParams = params.length > 0 ? `{ ${params.join(", ")} }` : "{}";
|
|
561
607
|
|
|
562
608
|
// Use sanitized names for TypeScript export identifiers
|
|
563
|
-
const exportTableRef = namespace
|
|
564
|
-
|
|
565
|
-
: table.ormName;
|
|
566
|
-
const relationsName = namespace ? `${exportTableRef}Relations` : `${table.ormName}Relations`;
|
|
609
|
+
const exportTableRef = namespace ? `${table.name}_${sanitizeNamespace(namespace)}` : table.name;
|
|
610
|
+
const relationsName = namespace ? `${exportTableRef}Relations` : `${table.name}Relations`;
|
|
567
611
|
|
|
568
612
|
ctx.imports.addImport("relations", "drizzle-orm");
|
|
569
613
|
return `export const ${relationsName} = relations(${exportTableRef}, (${relationParams}) => ({
|
|
@@ -581,24 +625,22 @@ ${relations.join(",\n")}
|
|
|
581
625
|
*/
|
|
582
626
|
function generateFragmentSchemaExport(
|
|
583
627
|
schema: AnySchema,
|
|
584
|
-
namespace: string,
|
|
628
|
+
namespace: string | null,
|
|
585
629
|
tablesWithRelations?: Set<string>,
|
|
586
|
-
|
|
630
|
+
_resolver?: NamingResolver,
|
|
587
631
|
): string {
|
|
588
632
|
const drizzleEntries: string[] = [];
|
|
589
633
|
|
|
590
634
|
for (const table of Object.values(schema.tables)) {
|
|
591
635
|
// TypeScript export name (always sanitized for valid JS identifiers)
|
|
592
|
-
const exportName = namespace
|
|
593
|
-
? `${table.ormName}_${sanitizeNamespace(namespace)}`
|
|
594
|
-
: table.ormName;
|
|
636
|
+
const exportName = namespace ? `${table.name}_${sanitizeNamespace(namespace)}` : table.name;
|
|
595
637
|
|
|
596
638
|
// Add physical table name to drizzle schema
|
|
597
639
|
drizzleEntries.push(` ${exportName}: ${exportName}`);
|
|
598
640
|
|
|
599
641
|
// Include relations for this table if they exist (either explicit or inverse)
|
|
600
642
|
if (tablesWithRelations?.has(table.name)) {
|
|
601
|
-
const relationsName = namespace ? `${exportName}Relations` : `${table.
|
|
643
|
+
const relationsName = namespace ? `${exportName}Relations` : `${table.name}Relations`;
|
|
602
644
|
|
|
603
645
|
drizzleEntries.push(` ${relationsName}: ${relationsName}`);
|
|
604
646
|
}
|
|
@@ -607,12 +649,12 @@ function generateFragmentSchemaExport(
|
|
|
607
649
|
// The key insight: Drizzle needs BOTH the table alias AND its relations alias
|
|
608
650
|
// in the same schema object for relational queries to work
|
|
609
651
|
if (namespace) {
|
|
610
|
-
drizzleEntries.push(` ${table.
|
|
652
|
+
drizzleEntries.push(` ${table.name}: ${exportName}`);
|
|
611
653
|
|
|
612
654
|
// Also add the relations under the aliased name if they exist
|
|
613
655
|
if (tablesWithRelations?.has(table.name)) {
|
|
614
656
|
const physicalRelationsName = `${exportName}Relations`;
|
|
615
|
-
const aliasRelationsName = `${table.
|
|
657
|
+
const aliasRelationsName = `${table.name}Relations`;
|
|
616
658
|
drizzleEntries.push(` ${aliasRelationsName}: ${physicalRelationsName}`);
|
|
617
659
|
}
|
|
618
660
|
}
|
|
@@ -639,8 +681,8 @@ export interface GenerateSchemaOptions {
|
|
|
639
681
|
/** Module to import from */
|
|
640
682
|
from: string;
|
|
641
683
|
};
|
|
642
|
-
/** Optional
|
|
643
|
-
|
|
684
|
+
/** Optional naming strategy override for physical names */
|
|
685
|
+
namingStrategy?: SqlNamingStrategy;
|
|
644
686
|
}
|
|
645
687
|
|
|
646
688
|
/**
|
|
@@ -649,35 +691,45 @@ export interface GenerateSchemaOptions {
|
|
|
649
691
|
/**
|
|
650
692
|
* Generate a schema file from one or more fragments with automatic de-duplication
|
|
651
693
|
*/
|
|
652
|
-
export function
|
|
653
|
-
fragments: { namespace: string; schema: AnySchema }[],
|
|
654
|
-
provider:
|
|
694
|
+
export function generateDrizzleSchema(
|
|
695
|
+
fragments: { namespace: string | null; schema: AnySchema }[],
|
|
696
|
+
provider: SupportedDatabase,
|
|
655
697
|
options?: GenerateSchemaOptions,
|
|
656
698
|
): string {
|
|
657
699
|
const ctx = createContext(provider, options?.idGeneratorImport);
|
|
658
700
|
const customTypes: string[] = [];
|
|
659
701
|
const sections: string[] = [];
|
|
660
|
-
const
|
|
661
|
-
options?.mapperFactory ||
|
|
662
|
-
((ns: string | undefined) => (ns ? createTableNameMapper(ns, true) : undefined));
|
|
702
|
+
const namingStrategy = options?.namingStrategy ?? defaultNamingStrategyForDatabase(provider);
|
|
663
703
|
|
|
664
704
|
for (const { schema, namespace } of fragments) {
|
|
665
705
|
const fragmentTables: string[] = [];
|
|
666
|
-
const
|
|
706
|
+
const resolver = createNamingResolver(schema, namespace, namingStrategy);
|
|
707
|
+
const schemaName = resolver.getSchemaName();
|
|
708
|
+
const schemaRef =
|
|
709
|
+
ctx.provider === "postgresql" && schemaName
|
|
710
|
+
? `schema_${sanitizeNamespace(schemaName)}`
|
|
711
|
+
: undefined;
|
|
667
712
|
|
|
668
713
|
// Add section header
|
|
669
714
|
fragmentTables.push("");
|
|
670
715
|
fragmentTables.push(
|
|
671
716
|
"// ============================================================================",
|
|
672
717
|
);
|
|
673
|
-
|
|
718
|
+
const namespaceLabel = namespace ?? "(none)";
|
|
719
|
+
fragmentTables.push(`// Fragment: ${namespaceLabel}`);
|
|
674
720
|
fragmentTables.push(
|
|
675
721
|
"// ============================================================================",
|
|
676
722
|
);
|
|
677
723
|
|
|
724
|
+
if (schemaRef && schemaName) {
|
|
725
|
+
ctx.imports.addImport("pgSchema", ctx.importSource);
|
|
726
|
+
fragmentTables.push("");
|
|
727
|
+
fragmentTables.push(`const ${schemaRef} = pgSchema("${schemaName}");`);
|
|
728
|
+
}
|
|
729
|
+
|
|
678
730
|
// Generate tables for this fragment
|
|
679
731
|
for (const table of Object.values(schema.tables)) {
|
|
680
|
-
const tableCode = generateTable(ctx, table, customTypes, namespace,
|
|
732
|
+
const tableCode = generateTable(ctx, table, customTypes, namespace, resolver, schemaRef);
|
|
681
733
|
fragmentTables.push("");
|
|
682
734
|
fragmentTables.push(tableCode);
|
|
683
735
|
}
|
|
@@ -704,7 +756,7 @@ export function generateSchema(
|
|
|
704
756
|
table,
|
|
705
757
|
namespace,
|
|
706
758
|
inverseRelations.get(table.name),
|
|
707
|
-
|
|
759
|
+
resolver,
|
|
708
760
|
);
|
|
709
761
|
if (relationCode) {
|
|
710
762
|
fragmentTables.push("");
|
|
@@ -713,12 +765,10 @@ export function generateSchema(
|
|
|
713
765
|
}
|
|
714
766
|
}
|
|
715
767
|
|
|
716
|
-
// Generate schema export object (skip for
|
|
717
|
-
if (namespace
|
|
768
|
+
// Generate schema export object (skip for internal fragment to avoid duplicate _schema exports)
|
|
769
|
+
if (!(namespace === null && schema.name === internalSchema.name)) {
|
|
718
770
|
fragmentTables.push("");
|
|
719
|
-
fragmentTables.push(
|
|
720
|
-
generateFragmentSchemaExport(schema, namespace, tablesWithRelations, mapper),
|
|
721
|
-
);
|
|
771
|
+
fragmentTables.push(generateFragmentSchemaExport(schema, namespace, tablesWithRelations));
|
|
722
772
|
}
|
|
723
773
|
|
|
724
774
|
sections.push(...fragmentTables);
|