@fragno-dev/db 0.1.14 → 0.2.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 +242 -139
- package/CHANGELOG.md +47 -0
- package/README.md +123 -8
- package/dist/adapters/adapters.d.ts +19 -5
- package/dist/adapters/adapters.d.ts.map +1 -1
- package/dist/adapters/adapters.js.map +1 -1
- package/dist/adapters/drizzle/drizzle-adapter.d.ts +6 -19
- package/dist/adapters/drizzle/drizzle-adapter.d.ts.map +1 -1
- package/dist/adapters/drizzle/drizzle-adapter.js +7 -47
- package/dist/adapters/drizzle/drizzle-adapter.js.map +1 -1
- package/dist/adapters/drizzle/generate.d.ts +7 -1
- package/dist/adapters/drizzle/generate.d.ts.map +1 -1
- package/dist/adapters/drizzle/generate.js +46 -45
- package/dist/adapters/drizzle/generate.js.map +1 -1
- package/dist/adapters/generic-sql/driver-config.d.ts +74 -0
- package/dist/adapters/generic-sql/driver-config.d.ts.map +1 -0
- package/dist/adapters/generic-sql/driver-config.js +94 -0
- package/dist/adapters/generic-sql/driver-config.js.map +1 -0
- package/dist/adapters/generic-sql/generic-sql-adapter.d.ts +43 -0
- package/dist/adapters/generic-sql/generic-sql-adapter.d.ts.map +1 -0
- package/dist/adapters/generic-sql/generic-sql-adapter.js +87 -0
- package/dist/adapters/generic-sql/generic-sql-adapter.js.map +1 -0
- package/dist/adapters/generic-sql/generic-sql-uow-executor.js +67 -0
- package/dist/adapters/generic-sql/generic-sql-uow-executor.js.map +1 -0
- package/dist/adapters/generic-sql/migration/cold-kysely.js +33 -0
- package/dist/adapters/generic-sql/migration/cold-kysely.js.map +1 -0
- package/dist/adapters/generic-sql/migration/dialect/mysql.js +60 -0
- package/dist/adapters/generic-sql/migration/dialect/mysql.js.map +1 -0
- package/dist/adapters/generic-sql/migration/dialect/postgres.js +59 -0
- package/dist/adapters/generic-sql/migration/dialect/postgres.js.map +1 -0
- package/dist/adapters/generic-sql/migration/dialect/sqlite.js +96 -0
- package/dist/adapters/generic-sql/migration/dialect/sqlite.js.map +1 -0
- package/dist/adapters/generic-sql/migration/executor.d.ts +15 -0
- package/dist/adapters/generic-sql/migration/executor.d.ts.map +1 -0
- package/dist/adapters/generic-sql/migration/executor.js +18 -0
- package/dist/adapters/generic-sql/migration/executor.js.map +1 -0
- package/dist/adapters/generic-sql/migration/prepared-migrations.d.ts +66 -0
- package/dist/adapters/generic-sql/migration/prepared-migrations.d.ts.map +1 -0
- package/dist/adapters/generic-sql/migration/prepared-migrations.js +68 -0
- package/dist/adapters/generic-sql/migration/prepared-migrations.js.map +1 -0
- package/dist/adapters/generic-sql/migration/sql-generator.js +212 -0
- package/dist/adapters/generic-sql/migration/sql-generator.js.map +1 -0
- package/dist/adapters/generic-sql/query/create-sql-query-compiler.js +32 -0
- package/dist/adapters/generic-sql/query/create-sql-query-compiler.js.map +1 -0
- package/dist/adapters/generic-sql/query/cursor-utils.js +37 -0
- package/dist/adapters/generic-sql/query/cursor-utils.js.map +1 -0
- package/dist/adapters/generic-sql/query/dialect/mysql.js +33 -0
- package/dist/adapters/generic-sql/query/dialect/mysql.js.map +1 -0
- package/dist/adapters/generic-sql/query/dialect/postgres.js +32 -0
- package/dist/adapters/generic-sql/query/dialect/postgres.js.map +1 -0
- package/dist/adapters/generic-sql/query/dialect/sqlite.js +32 -0
- package/dist/adapters/generic-sql/query/dialect/sqlite.js.map +1 -0
- package/dist/adapters/generic-sql/query/generic-sql-uow-operation-compiler.js +152 -0
- package/dist/adapters/generic-sql/query/generic-sql-uow-operation-compiler.js.map +1 -0
- package/dist/adapters/generic-sql/query/select-builder.js +69 -0
- package/dist/adapters/generic-sql/query/select-builder.js.map +1 -0
- package/dist/adapters/generic-sql/query/sql-query-compiler.js +145 -0
- package/dist/adapters/generic-sql/query/sql-query-compiler.js.map +1 -0
- package/dist/adapters/generic-sql/query/where-builder.js +129 -0
- package/dist/adapters/generic-sql/query/where-builder.js.map +1 -0
- package/dist/adapters/generic-sql/result-interpreter.js +74 -0
- package/dist/adapters/generic-sql/result-interpreter.js.map +1 -0
- package/dist/adapters/generic-sql/uow-decoder.js +105 -0
- package/dist/adapters/generic-sql/uow-decoder.js.map +1 -0
- package/dist/adapters/generic-sql/uow-encoder.js +93 -0
- package/dist/adapters/generic-sql/uow-encoder.js.map +1 -0
- package/dist/adapters/kysely/kysely-adapter.d.ts +5 -16
- package/dist/adapters/kysely/kysely-adapter.d.ts.map +1 -1
- package/dist/adapters/kysely/kysely-adapter.js +6 -159
- package/dist/adapters/kysely/kysely-adapter.js.map +1 -1
- package/dist/adapters/{drizzle/drizzle-query.js → shared/from-unit-of-work-compiler.js} +48 -62
- package/dist/adapters/shared/from-unit-of-work-compiler.js.map +1 -0
- package/dist/adapters/{kysely/kysely-shared.d.ts → shared/table-name-mapper.d.ts} +3 -2
- package/dist/adapters/shared/table-name-mapper.d.ts.map +1 -0
- package/dist/adapters/shared/table-name-mapper.js +43 -0
- package/dist/adapters/shared/table-name-mapper.js.map +1 -0
- package/dist/adapters/shared/uow-operation-compiler.js +105 -0
- package/dist/adapters/shared/uow-operation-compiler.js.map +1 -0
- package/dist/db-fragment-definition-builder.d.ts +186 -0
- package/dist/db-fragment-definition-builder.d.ts.map +1 -0
- package/dist/db-fragment-definition-builder.js +207 -0
- package/dist/db-fragment-definition-builder.js.map +1 -0
- package/dist/fragments/internal-fragment.d.ts +53 -0
- package/dist/fragments/internal-fragment.d.ts.map +1 -0
- package/dist/fragments/internal-fragment.js +111 -0
- package/dist/fragments/internal-fragment.js.map +1 -0
- package/dist/hooks/hooks.d.ts +51 -0
- package/dist/hooks/hooks.d.ts.map +1 -0
- package/dist/hooks/hooks.js +88 -0
- package/dist/hooks/hooks.js.map +1 -0
- package/dist/migration-engine/generation-engine.d.ts +0 -2
- package/dist/migration-engine/generation-engine.d.ts.map +1 -1
- package/dist/migration-engine/generation-engine.js +38 -56
- package/dist/migration-engine/generation-engine.js.map +1 -1
- package/dist/mod.d.ts +35 -23
- package/dist/mod.d.ts.map +1 -1
- package/dist/mod.js +48 -45
- package/dist/mod.js.map +1 -1
- package/dist/node_modules/.pnpm/rou3@0.7.10/node_modules/rou3/dist/index.js +165 -0
- package/dist/node_modules/.pnpm/rou3@0.7.10/node_modules/rou3/dist/index.js.map +1 -0
- package/dist/packages/fragno/dist/api/bind-services.js +20 -0
- package/dist/packages/fragno/dist/api/bind-services.js.map +1 -0
- package/dist/packages/fragno/dist/api/error.js +48 -0
- package/dist/packages/fragno/dist/api/error.js.map +1 -0
- package/dist/packages/fragno/dist/api/fragment-definition-builder.js +320 -0
- package/dist/packages/fragno/dist/api/fragment-definition-builder.js.map +1 -0
- package/dist/packages/fragno/dist/api/fragment-instantiator.js +525 -0
- package/dist/packages/fragno/dist/api/fragment-instantiator.js.map +1 -0
- package/dist/packages/fragno/dist/api/fragno-response.js +73 -0
- package/dist/packages/fragno/dist/api/fragno-response.js.map +1 -0
- package/dist/packages/fragno/dist/api/internal/response-stream.js +81 -0
- package/dist/packages/fragno/dist/api/internal/response-stream.js.map +1 -0
- package/dist/packages/fragno/dist/api/internal/route.js +10 -0
- package/dist/packages/fragno/dist/api/internal/route.js.map +1 -0
- package/dist/packages/fragno/dist/api/mutable-request-state.js +97 -0
- package/dist/packages/fragno/dist/api/mutable-request-state.js.map +1 -0
- package/dist/packages/fragno/dist/api/request-context-storage.js +43 -0
- package/dist/packages/fragno/dist/api/request-context-storage.js.map +1 -0
- package/dist/packages/fragno/dist/api/request-input-context.js +118 -0
- package/dist/packages/fragno/dist/api/request-input-context.js.map +1 -0
- package/dist/packages/fragno/dist/api/request-middleware.js +83 -0
- package/dist/packages/fragno/dist/api/request-middleware.js.map +1 -0
- package/dist/packages/fragno/dist/api/request-output-context.js +119 -0
- package/dist/packages/fragno/dist/api/request-output-context.js.map +1 -0
- package/dist/packages/fragno/dist/api/route.js +17 -0
- package/dist/packages/fragno/dist/api/route.js.map +1 -0
- package/dist/packages/fragno/dist/internal/symbols.js +10 -0
- package/dist/packages/fragno/dist/internal/symbols.js.map +1 -0
- package/dist/query/column-defaults.js +27 -0
- package/dist/query/column-defaults.js.map +1 -0
- package/dist/query/cursor.d.ts +14 -6
- package/dist/query/cursor.d.ts.map +1 -1
- package/dist/query/cursor.js +16 -7
- package/dist/query/cursor.js.map +1 -1
- package/dist/query/orm/orm.d.ts +1 -1
- package/dist/query/orm/orm.js.map +1 -1
- package/dist/query/serialize/create-sql-serializer.js +30 -0
- package/dist/query/serialize/create-sql-serializer.js.map +1 -0
- package/dist/query/serialize/dialect/mysql-serializer.js +87 -0
- package/dist/query/serialize/dialect/mysql-serializer.js.map +1 -0
- package/dist/query/serialize/dialect/postgres-serializer.js +80 -0
- package/dist/query/serialize/dialect/postgres-serializer.js.map +1 -0
- package/dist/query/serialize/dialect/sqlite-serializer.js +93 -0
- package/dist/query/serialize/dialect/sqlite-serializer.js.map +1 -0
- package/dist/query/serialize/sql-serializer.js +67 -0
- package/dist/query/serialize/sql-serializer.js.map +1 -0
- package/dist/query/{query.d.ts → simple-query-interface.d.ts} +6 -6
- package/dist/query/simple-query-interface.d.ts.map +1 -0
- package/dist/query/unit-of-work/execute-unit-of-work.d.ts +133 -0
- package/dist/query/unit-of-work/execute-unit-of-work.d.ts.map +1 -0
- package/dist/query/unit-of-work/execute-unit-of-work.js +197 -0
- package/dist/query/unit-of-work/execute-unit-of-work.js.map +1 -0
- package/dist/query/unit-of-work/retry-policy.d.ts +88 -0
- package/dist/query/unit-of-work/retry-policy.d.ts.map +1 -0
- package/dist/query/unit-of-work/retry-policy.js +61 -0
- package/dist/query/unit-of-work/retry-policy.js.map +1 -0
- package/dist/query/{unit-of-work.d.ts → unit-of-work/unit-of-work.d.ts} +145 -58
- package/dist/query/unit-of-work/unit-of-work.d.ts.map +1 -0
- package/dist/query/{unit-of-work.js → unit-of-work/unit-of-work.js} +435 -198
- package/dist/query/unit-of-work/unit-of-work.js.map +1 -0
- package/dist/query/value-decoding.js +71 -0
- package/dist/query/value-decoding.js.map +1 -0
- package/dist/query/value-encoding.js +124 -0
- package/dist/query/value-encoding.js.map +1 -0
- package/dist/schema/create.d.ts +3 -0
- package/dist/schema/create.d.ts.map +1 -1
- package/dist/schema/create.js +4 -0
- package/dist/schema/create.js.map +1 -1
- package/dist/schema/type-conversion/create-sql-type-mapper.js +29 -0
- package/dist/schema/type-conversion/create-sql-type-mapper.js.map +1 -0
- package/dist/schema/type-conversion/dialect/mysql.js +57 -0
- package/dist/schema/type-conversion/dialect/mysql.js.map +1 -0
- package/dist/schema/type-conversion/dialect/postgres.js +56 -0
- package/dist/schema/type-conversion/dialect/postgres.js.map +1 -0
- package/dist/schema/type-conversion/dialect/sqlite.js +52 -0
- package/dist/schema/type-conversion/dialect/sqlite.js.map +1 -0
- package/dist/schema/type-conversion/type-mapping.js +63 -0
- package/dist/schema/type-conversion/type-mapping.js.map +1 -0
- package/dist/sql-driver/connection/connection-provider.d.ts +13 -0
- package/dist/sql-driver/connection/connection-provider.d.ts.map +1 -0
- package/dist/sql-driver/connection/connection-provider.js +19 -0
- package/dist/sql-driver/connection/connection-provider.js.map +1 -0
- package/dist/sql-driver/connection/single-connection-provider.js +23 -0
- package/dist/sql-driver/connection/single-connection-provider.js.map +1 -0
- package/dist/sql-driver/dialect-adapter/dialect-adapter.d.ts +7 -0
- package/dist/sql-driver/dialect-adapter/dialect-adapter.d.ts.map +1 -0
- package/dist/sql-driver/dialects/dialects.d.ts +2 -0
- package/dist/sql-driver/dialects/dialects.js +3 -0
- package/dist/sql-driver/dialects/durable-object-dialect.d.ts +72 -0
- package/dist/sql-driver/dialects/durable-object-dialect.d.ts.map +1 -0
- package/dist/sql-driver/dialects/durable-object-dialect.js +130 -0
- package/dist/sql-driver/dialects/durable-object-dialect.js.map +1 -0
- package/dist/sql-driver/driver/runtime-driver.d.ts +23 -0
- package/dist/sql-driver/driver/runtime-driver.d.ts.map +1 -0
- package/dist/sql-driver/driver/runtime-driver.js +56 -0
- package/dist/sql-driver/driver/runtime-driver.js.map +1 -0
- package/dist/sql-driver/query-executor/default-query-executor.js +26 -0
- package/dist/sql-driver/query-executor/default-query-executor.js.map +1 -0
- package/dist/sql-driver/query-executor/plugin.d.ts +17 -0
- package/dist/sql-driver/query-executor/plugin.d.ts.map +1 -0
- package/dist/sql-driver/query-executor/query-executor-base.js +25 -0
- package/dist/sql-driver/query-executor/query-executor-base.js.map +1 -0
- package/dist/sql-driver/query-executor/query-executor.d.ts +36 -0
- package/dist/sql-driver/query-executor/query-executor.d.ts.map +1 -0
- package/dist/sql-driver/sql-driver-adapter.d.ts +29 -0
- package/dist/sql-driver/sql-driver-adapter.d.ts.map +1 -0
- package/dist/sql-driver/sql-driver-adapter.js +68 -0
- package/dist/sql-driver/sql-driver-adapter.js.map +1 -0
- package/dist/sql-driver/sql-driver.d.ts +38 -0
- package/dist/sql-driver/sql-driver.d.ts.map +1 -0
- package/dist/sql-driver/sql-driver.js +1 -0
- package/dist/sql-driver/sql.js +50 -0
- package/dist/sql-driver/sql.js.map +1 -0
- package/dist/with-database.d.ts +32 -0
- package/dist/with-database.d.ts.map +1 -0
- package/dist/with-database.js +34 -0
- package/dist/with-database.js.map +1 -0
- package/package.json +43 -9
- package/src/adapters/adapters.ts +23 -4
- package/src/adapters/drizzle/drizzle-adapter-pglite.test.ts +140 -185
- package/src/adapters/drizzle/{drizzle-adapter-sqlite.test.ts → drizzle-adapter-sqlite3.test.ts} +187 -55
- package/src/adapters/drizzle/drizzle-adapter.ts +14 -93
- package/src/adapters/drizzle/generate.test.ts +102 -269
- package/src/adapters/drizzle/generate.ts +89 -63
- package/src/adapters/drizzle/migrate-drizzle.test.ts +19 -0
- package/src/adapters/drizzle/shared.ts +0 -34
- package/src/adapters/drizzle/test-utils.ts +36 -5
- package/src/adapters/generic-sql/README.md +14 -0
- package/src/adapters/generic-sql/driver-config.ts +144 -0
- package/src/adapters/generic-sql/generic-sql-adapter.test.ts +50 -0
- package/src/adapters/generic-sql/generic-sql-adapter.ts +146 -0
- package/src/adapters/generic-sql/generic-sql-uow-executor.ts +130 -0
- package/src/adapters/generic-sql/migration/cold-kysely.ts +55 -0
- package/src/adapters/{kysely/migration/execute-mysql.test.ts → generic-sql/migration/dialect/mysql.test.ts} +342 -484
- package/src/adapters/generic-sql/migration/dialect/mysql.ts +104 -0
- package/src/adapters/generic-sql/migration/dialect/postgres.test.ts +1008 -0
- package/src/adapters/generic-sql/migration/dialect/postgres.ts +113 -0
- package/src/adapters/{kysely/migration/execute-sqlite.test.ts → generic-sql/migration/dialect/sqlite.test.ts} +307 -510
- package/src/adapters/generic-sql/migration/dialect/sqlite.ts +189 -0
- package/src/adapters/generic-sql/migration/executor.ts +33 -0
- package/src/adapters/generic-sql/migration/prepared-migrations.test.ts +661 -0
- package/src/adapters/generic-sql/migration/prepared-migrations.ts +214 -0
- package/src/adapters/generic-sql/migration/sql-generator.ts +413 -0
- package/src/adapters/generic-sql/query/create-sql-query-compiler.ts +36 -0
- package/src/adapters/generic-sql/query/cursor-utils.ts +56 -0
- package/src/adapters/generic-sql/query/dialect/mysql.ts +34 -0
- package/src/adapters/generic-sql/query/dialect/postgres.ts +32 -0
- package/src/adapters/generic-sql/query/dialect/sqlite.ts +32 -0
- package/src/adapters/generic-sql/query/generic-sql-uow-operation-compiler.test.ts +1568 -0
- package/src/adapters/generic-sql/query/generic-sql-uow-operation-compiler.ts +314 -0
- package/src/adapters/generic-sql/query/select-builder.test.ts +256 -0
- package/src/adapters/generic-sql/query/select-builder.ts +137 -0
- package/src/adapters/generic-sql/query/sql-query-compiler.test.ts +195 -0
- package/src/adapters/generic-sql/query/sql-query-compiler.ts +367 -0
- package/src/adapters/generic-sql/query/where-builder.test.ts +744 -0
- package/src/adapters/generic-sql/query/where-builder.ts +211 -0
- package/src/adapters/generic-sql/result-interpreter.ts +102 -0
- package/src/adapters/generic-sql/test/generic-drizzle-adapter-sqlite3.test.ts +899 -0
- package/src/adapters/generic-sql/uow-decoder.test.ts +399 -0
- package/src/adapters/generic-sql/uow-decoder.ts +152 -0
- package/src/adapters/generic-sql/uow-encoder.test.ts +183 -0
- package/src/adapters/generic-sql/uow-encoder.ts +131 -0
- package/src/adapters/kysely/kysely-adapter-pglite.test.ts +90 -96
- package/src/adapters/kysely/kysely-adapter-sqlocal.test.ts +215 -0
- package/src/adapters/kysely/kysely-adapter.ts +10 -242
- package/src/adapters/{drizzle/drizzle-query.ts → shared/from-unit-of-work-compiler.ts} +111 -106
- package/src/adapters/shared/table-name-mapper.ts +50 -0
- package/src/adapters/shared/uow-operation-compiler.ts +211 -0
- package/src/db-fragment-definition-builder.test.ts +887 -0
- package/src/db-fragment-definition-builder.ts +737 -0
- package/src/db-fragment-instantiator.test.ts +543 -0
- package/src/db-fragment-integration.test.ts +406 -0
- package/src/fragments/internal-fragment.test.ts +549 -0
- package/src/fragments/internal-fragment.ts +249 -0
- package/src/hooks/hooks.test.ts +575 -0
- package/src/hooks/hooks.ts +179 -0
- package/src/migration-engine/generation-engine.test.ts +60 -27
- package/src/migration-engine/generation-engine.ts +99 -92
- package/src/mod.ts +139 -78
- package/src/query/column-defaults.ts +49 -0
- package/src/query/cursor.test.ts +147 -3
- package/src/query/cursor.ts +25 -8
- package/src/query/orm/orm.ts +1 -1
- package/src/query/query-type.test.ts +9 -9
- package/src/query/serialize/create-sql-serializer.ts +34 -0
- package/src/query/serialize/dialect/mysql-serializer.ts +142 -0
- package/src/query/serialize/dialect/postgres-serializer.ts +129 -0
- package/src/query/serialize/dialect/sqlite-serializer.test.ts +251 -0
- package/src/query/serialize/dialect/sqlite-serializer.ts +156 -0
- package/src/query/serialize/sql-serializer.ts +143 -0
- package/src/query/{query.ts → simple-query-interface.ts} +4 -4
- package/src/query/unit-of-work/execute-unit-of-work.test.ts +1310 -0
- package/src/query/unit-of-work/execute-unit-of-work.ts +504 -0
- package/src/query/unit-of-work/retry-policy.test.ts +217 -0
- package/src/query/unit-of-work/retry-policy.ts +141 -0
- package/src/query/unit-of-work/unit-of-work-coordinator.test.ts +831 -0
- package/src/query/{unit-of-work-types.test.ts → unit-of-work/unit-of-work-types.test.ts} +7 -5
- package/src/query/unit-of-work/unit-of-work.test.ts +1716 -0
- package/src/query/{unit-of-work.ts → unit-of-work/unit-of-work.ts} +716 -420
- package/src/query/{result-transform.test.ts → value-decoding.test.ts} +45 -298
- package/src/query/value-decoding.ts +113 -0
- package/src/query/value-encoding.test.ts +390 -0
- package/src/query/value-encoding.ts +168 -0
- package/src/schema/create.test.ts +5 -1
- package/src/schema/create.ts +5 -0
- package/src/schema/serialize.test.ts +165 -407
- package/src/schema/type-conversion/create-sql-type-mapper.ts +28 -0
- package/src/schema/type-conversion/dialect/mysql.ts +64 -0
- package/src/schema/type-conversion/dialect/postgres.ts +62 -0
- package/src/schema/type-conversion/dialect/sqlite.ts +63 -0
- package/src/schema/type-conversion/type-mapping.test.ts +137 -0
- package/src/schema/type-conversion/type-mapping.ts +153 -0
- package/src/shared/connection-pool.ts +5 -5
- package/src/sql-driver/better-sqlite3.test.ts +126 -0
- package/src/sql-driver/connection/connection-provider.ts +27 -0
- package/src/sql-driver/connection/single-connection-provider.ts +42 -0
- package/src/sql-driver/dialect-adapter/dialect-adapter.ts +9 -0
- package/src/sql-driver/dialect-adapter/sqlite-dialect-adapter.ts +7 -0
- package/src/sql-driver/dialects/dialects.ts +1 -0
- package/src/sql-driver/dialects/durable-object-dialect.ts +260 -0
- package/src/sql-driver/driver/runtime-driver.ts +91 -0
- package/src/sql-driver/query-executor/default-query-executor.ts +38 -0
- package/src/sql-driver/query-executor/plugin.ts +22 -0
- package/src/sql-driver/query-executor/query-executor-base.ts +53 -0
- package/src/sql-driver/query-executor/query-executor.ts +44 -0
- package/src/sql-driver/sql-driver-adapter.ts +96 -0
- package/src/sql-driver/sql-driver.ts +53 -0
- package/src/sql-driver/sql.ts +57 -0
- package/src/sql-driver/sqlocal.test.ts +117 -0
- package/src/with-database.ts +152 -0
- package/tsdown.config.ts +8 -2
- package/dist/adapters/drizzle/drizzle-connection-pool.js +0 -40
- package/dist/adapters/drizzle/drizzle-connection-pool.js.map +0 -1
- package/dist/adapters/drizzle/drizzle-query.d.ts +0 -23
- package/dist/adapters/drizzle/drizzle-query.d.ts.map +0 -1
- package/dist/adapters/drizzle/drizzle-query.js.map +0 -1
- package/dist/adapters/drizzle/drizzle-uow-compiler.d.ts +0 -10
- package/dist/adapters/drizzle/drizzle-uow-compiler.d.ts.map +0 -1
- package/dist/adapters/drizzle/drizzle-uow-compiler.js +0 -315
- package/dist/adapters/drizzle/drizzle-uow-compiler.js.map +0 -1
- package/dist/adapters/drizzle/drizzle-uow-decoder.js +0 -116
- package/dist/adapters/drizzle/drizzle-uow-decoder.js.map +0 -1
- package/dist/adapters/drizzle/drizzle-uow-executor.js +0 -149
- package/dist/adapters/drizzle/drizzle-uow-executor.js.map +0 -1
- package/dist/adapters/drizzle/join-column-utils.js +0 -28
- package/dist/adapters/drizzle/join-column-utils.js.map +0 -1
- package/dist/adapters/drizzle/shared.d.ts +0 -14
- package/dist/adapters/drizzle/shared.d.ts.map +0 -1
- package/dist/adapters/drizzle/shared.js +0 -35
- package/dist/adapters/drizzle/shared.js.map +0 -1
- package/dist/adapters/kysely/kysely-connection-pool.js +0 -41
- package/dist/adapters/kysely/kysely-connection-pool.js.map +0 -1
- package/dist/adapters/kysely/kysely-query-builder.js +0 -321
- package/dist/adapters/kysely/kysely-query-builder.js.map +0 -1
- package/dist/adapters/kysely/kysely-query-compiler.js +0 -66
- package/dist/adapters/kysely/kysely-query-compiler.js.map +0 -1
- package/dist/adapters/kysely/kysely-query.d.ts +0 -22
- package/dist/adapters/kysely/kysely-query.d.ts.map +0 -1
- package/dist/adapters/kysely/kysely-query.js +0 -223
- package/dist/adapters/kysely/kysely-query.js.map +0 -1
- package/dist/adapters/kysely/kysely-shared.d.ts.map +0 -1
- package/dist/adapters/kysely/kysely-shared.js +0 -18
- package/dist/adapters/kysely/kysely-shared.js.map +0 -1
- package/dist/adapters/kysely/kysely-uow-compiler.js +0 -170
- package/dist/adapters/kysely/kysely-uow-compiler.js.map +0 -1
- package/dist/adapters/kysely/kysely-uow-executor.js +0 -89
- package/dist/adapters/kysely/kysely-uow-executor.js.map +0 -1
- package/dist/adapters/kysely/migration/execute-base.js +0 -128
- package/dist/adapters/kysely/migration/execute-base.js.map +0 -1
- package/dist/adapters/kysely/migration/execute-factory.js +0 -34
- package/dist/adapters/kysely/migration/execute-factory.js.map +0 -1
- package/dist/adapters/kysely/migration/execute-mssql.js +0 -112
- package/dist/adapters/kysely/migration/execute-mssql.js.map +0 -1
- package/dist/adapters/kysely/migration/execute-mysql.js +0 -93
- package/dist/adapters/kysely/migration/execute-mysql.js.map +0 -1
- package/dist/adapters/kysely/migration/execute-postgres.js +0 -104
- package/dist/adapters/kysely/migration/execute-postgres.js.map +0 -1
- package/dist/adapters/kysely/migration/execute-sqlite.js +0 -123
- package/dist/adapters/kysely/migration/execute-sqlite.js.map +0 -1
- package/dist/adapters/kysely/migration/execute.js +0 -34
- package/dist/adapters/kysely/migration/execute.js.map +0 -1
- package/dist/bind-services.d.ts +0 -7
- package/dist/bind-services.d.ts.map +0 -1
- package/dist/bind-services.js +0 -14
- package/dist/bind-services.js.map +0 -1
- package/dist/fragment.d.ts +0 -173
- package/dist/fragment.d.ts.map +0 -1
- package/dist/fragment.js +0 -191
- package/dist/fragment.js.map +0 -1
- package/dist/migration-engine/create.d.ts +0 -37
- package/dist/migration-engine/create.d.ts.map +0 -1
- package/dist/migration-engine/create.js +0 -58
- package/dist/migration-engine/create.js.map +0 -1
- package/dist/migration-engine/shared.d.ts +0 -112
- package/dist/migration-engine/shared.d.ts.map +0 -1
- package/dist/query/query.d.ts.map +0 -1
- package/dist/query/result-transform.js +0 -168
- package/dist/query/result-transform.js.map +0 -1
- package/dist/query/unit-of-work.d.ts.map +0 -1
- package/dist/query/unit-of-work.js.map +0 -1
- package/dist/schema/serialize.js +0 -106
- package/dist/schema/serialize.js.map +0 -1
- package/dist/shared/settings-schema.js +0 -36
- package/dist/shared/settings-schema.js.map +0 -1
- package/src/adapters/drizzle/drizzle-adapter.test.ts +0 -170
- package/src/adapters/drizzle/drizzle-connection-pool.ts +0 -66
- package/src/adapters/drizzle/drizzle-query.test.ts +0 -499
- package/src/adapters/drizzle/drizzle-uow-compiler.test.ts +0 -1383
- package/src/adapters/drizzle/drizzle-uow-compiler.ts +0 -636
- package/src/adapters/drizzle/drizzle-uow-decoder.ts +0 -218
- package/src/adapters/drizzle/drizzle-uow-executor.ts +0 -276
- package/src/adapters/drizzle/join-column-utils.test.ts +0 -79
- package/src/adapters/drizzle/join-column-utils.ts +0 -39
- package/src/adapters/kysely/kysely-connection-pool.ts +0 -70
- package/src/adapters/kysely/kysely-query-builder.test.ts +0 -1344
- package/src/adapters/kysely/kysely-query-builder.ts +0 -666
- package/src/adapters/kysely/kysely-query-compiler.ts +0 -132
- package/src/adapters/kysely/kysely-query.test.ts +0 -498
- package/src/adapters/kysely/kysely-query.ts +0 -390
- package/src/adapters/kysely/kysely-shared.ts +0 -23
- package/src/adapters/kysely/kysely-uow-compiler.test.ts +0 -998
- package/src/adapters/kysely/kysely-uow-compiler.ts +0 -318
- package/src/adapters/kysely/kysely-uow-executor.ts +0 -145
- package/src/adapters/kysely/kysely-uow-joins.test.ts +0 -811
- package/src/adapters/kysely/migration/execute-base.ts +0 -256
- package/src/adapters/kysely/migration/execute-factory.ts +0 -53
- package/src/adapters/kysely/migration/execute-mssql.ts +0 -250
- package/src/adapters/kysely/migration/execute-mysql.ts +0 -211
- package/src/adapters/kysely/migration/execute-postgres.test.ts +0 -2657
- package/src/adapters/kysely/migration/execute-postgres.ts +0 -234
- package/src/adapters/kysely/migration/execute-sqlite.ts +0 -247
- package/src/adapters/kysely/migration/execute.ts +0 -50
- package/src/adapters/kysely/migration/kysely-migrator.test.ts +0 -261
- package/src/bind-services.test.ts +0 -214
- package/src/bind-services.ts +0 -37
- package/src/db-fragment.test.ts +0 -800
- package/src/fragment.ts +0 -727
- package/src/query/result-transform.ts +0 -271
- package/src/query/unit-of-work-multi-schema.test.ts +0 -64
- package/src/query/unit-of-work.test.ts +0 -943
- package/src/schema/serialize.ts +0 -396
- package/src/shared/settings-schema.ts +0 -61
- package/src/uow-context-integration.test.ts +0 -102
- package/src/uow-context.test.ts +0 -182
- /package/dist/query/{query.js → simple-query-interface.js} +0 -0
package/README.md
CHANGED
|
@@ -1,13 +1,128 @@
|
|
|
1
1
|
# @fragno-dev/db
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Optional, ORM-agnostic database layer for Fragno libraries.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
Library authors define a type-safe schema; users plug in their existing Kysely or Drizzle setup so
|
|
6
|
+
data is written directly into their database.
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
- **License:** MIT
|
|
11
|
-
- **Source:** https://github.com/fuma-nama/fumadb
|
|
8
|
+
Full docs live at
|
|
9
|
+
[Database integration for library authors](https://fragno.dev/docs/fragno/for-library-authors/database-integration/overview).
|
|
12
10
|
|
|
13
|
-
|
|
11
|
+
## Who is this for?
|
|
12
|
+
|
|
13
|
+
- **Library authors** who want to ship a full-stack library that needs persistent storage, without
|
|
14
|
+
owning the user's database.
|
|
15
|
+
|
|
16
|
+
Your library defines the schema and queries; your users provide the database adapter.
|
|
17
|
+
|
|
18
|
+
## Quick start
|
|
19
|
+
|
|
20
|
+
### 1. Install
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
npm install @fragno-dev/db @fragno-dev/core
|
|
24
|
+
# or
|
|
25
|
+
pnpm add @fragno-dev/db @fragno-dev/core
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
And make sure to install the CLI to perform migrations / schema generation:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
npm install --save-dev @fragno-dev/cli
|
|
32
|
+
# or
|
|
33
|
+
pnpm add --dev @fragno-dev/cli
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### 2. Define a schema
|
|
37
|
+
|
|
38
|
+
```ts
|
|
39
|
+
// schema.ts
|
|
40
|
+
import { schema, idColumn, column } from "@fragno-dev/db/schema";
|
|
41
|
+
|
|
42
|
+
export const commentSchema = schema((s) => {
|
|
43
|
+
return s
|
|
44
|
+
.addTable("comment", (t) => {
|
|
45
|
+
return t
|
|
46
|
+
.addColumn("id", idColumn())
|
|
47
|
+
.addColumn("content", column("string"))
|
|
48
|
+
.addColumn("userId", column("string"))
|
|
49
|
+
.addColumn("postId", column("string"));
|
|
50
|
+
})
|
|
51
|
+
.addTable("user", (t) => {
|
|
52
|
+
return t.addColumn("id", idColumn()).addColumn("name", column("string"));
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### 3. Attach it to your library
|
|
58
|
+
|
|
59
|
+
```ts
|
|
60
|
+
// index.ts
|
|
61
|
+
import { defineFragment, instantiate } from "@fragno-dev/core";
|
|
62
|
+
import { withDatabase, type FragnoPublicConfigWithDatabase } from "@fragno-dev/db";
|
|
63
|
+
import { commentSchema } from "./schema";
|
|
64
|
+
|
|
65
|
+
export interface CommentLibraryConfig {
|
|
66
|
+
maxCommentsPerPost?: number;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const commentLibraryDef = defineFragment<CommentLibraryConfig>("comment-library")
|
|
70
|
+
// --> use .extend to add the database layer <--
|
|
71
|
+
.extend(withDatabase(commentSchema))
|
|
72
|
+
.providesBaseService(({ db }) => {
|
|
73
|
+
return {
|
|
74
|
+
createComment: async (data: { content: string; userId: string; postId: string }) => {
|
|
75
|
+
const id = await db.create("comment", data);
|
|
76
|
+
return { id: id.toJSON(), ...data };
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
})
|
|
80
|
+
.build();
|
|
81
|
+
|
|
82
|
+
export function createCommentLibrary(
|
|
83
|
+
config: CommentLibraryConfig = {},
|
|
84
|
+
options: FragnoPublicConfigWithDatabase,
|
|
85
|
+
) {
|
|
86
|
+
return instantiate(commentLibraryDef)
|
|
87
|
+
.withConfig(config)
|
|
88
|
+
.withRoutes([])
|
|
89
|
+
.withOptions(options)
|
|
90
|
+
.build();
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Your users pass their own database adapter (Kysely or Drizzle) via `options`.
|
|
95
|
+
|
|
96
|
+
## Key features
|
|
97
|
+
|
|
98
|
+
- **Schema definition**: define tables, columns, indexes, and relations with a fluent, typed API.
|
|
99
|
+
- **Type-safe ORM**: full TypeScript inference for queries and results.
|
|
100
|
+
- **User-owned database**: your library never owns the database; users provide the adapter.
|
|
101
|
+
- **ORM agnostic**: works with Kysely or Drizzle (and more to come).
|
|
102
|
+
- **Namespaced tables**: avoids conflicts with user tables.
|
|
103
|
+
|
|
104
|
+
## ORM and database support
|
|
105
|
+
|
|
106
|
+
`@fragno-dev/db` works with:
|
|
107
|
+
|
|
108
|
+
- **Kysely**
|
|
109
|
+
- **Drizzle**
|
|
110
|
+
|
|
111
|
+
Backed by Postgres and SQLite, including PGLite and Cloudflare Durable Objects.
|
|
112
|
+
|
|
113
|
+
## Docs and examples
|
|
114
|
+
|
|
115
|
+
- **Overview**:
|
|
116
|
+
[Database integration for library authors](https://fragno.dev/docs/fragno/for-library-authors/database-integration/overview)
|
|
117
|
+
- **Schemas**:
|
|
118
|
+
[Defining schemas](https://fragno.dev/docs/fragno/for-library-authors/database-integration/defining-schemas)
|
|
119
|
+
- **Querying**:
|
|
120
|
+
[Querying API](https://fragno.dev/docs/fragno/for-library-authors/database-integration/querying)
|
|
121
|
+
- **Example library**:
|
|
122
|
+
[`example-fragments/fragno-db-library`](https://github.com/rejot-dev/fragno/tree/main/example-fragments/fragno-db-library)
|
|
123
|
+
|
|
124
|
+
## Attribution
|
|
125
|
+
|
|
126
|
+
**Important:** A portion of this package's codebase is adopted from
|
|
127
|
+
[fumadb](https://github.com/fuma-nama/fumadb), which is licensed under the MIT License. We are
|
|
128
|
+
grateful to Fuma Nama (and contributors) for their excellent work on the original implementation.
|
|
@@ -1,11 +1,20 @@
|
|
|
1
1
|
import { AnySchema } from "../schema/create.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { IUnitOfWork } from "../query/unit-of-work/unit-of-work.js";
|
|
3
|
+
import { SimpleQueryInterface } from "../query/simple-query-interface.js";
|
|
4
4
|
import { SchemaGenerator } from "../schema-generator/schema-generator.js";
|
|
5
|
+
import { PreparedMigrations } from "./generic-sql/migration/prepared-migrations.js";
|
|
6
|
+
import { RequestContextStorage } from "@fragno-dev/core/internal/request-context-storage";
|
|
5
7
|
|
|
6
8
|
//#region src/adapters/adapters.d.ts
|
|
7
9
|
declare const fragnoDatabaseAdapterNameFakeSymbol: "$fragno-database-adapter-name";
|
|
8
10
|
declare const fragnoDatabaseAdapterVersionFakeSymbol: "$fragno-database-adapter-version";
|
|
11
|
+
/**
|
|
12
|
+
* Storage type for database context - stores the Unit of Work.
|
|
13
|
+
* This is shared across all fragments using the same adapter.
|
|
14
|
+
*/
|
|
15
|
+
type DatabaseContextStorage = {
|
|
16
|
+
uow: IUnitOfWork;
|
|
17
|
+
};
|
|
9
18
|
/**
|
|
10
19
|
* Maps logical table names (used by fragment authors) to physical table names (with namespace suffix)
|
|
11
20
|
*/
|
|
@@ -16,12 +25,17 @@ interface TableNameMapper {
|
|
|
16
25
|
interface DatabaseAdapter<TUOWConfig = void> {
|
|
17
26
|
[fragnoDatabaseAdapterNameFakeSymbol]: string;
|
|
18
27
|
[fragnoDatabaseAdapterVersionFakeSymbol]: number;
|
|
28
|
+
/**
|
|
29
|
+
* Request context storage shared across all fragments using this adapter.
|
|
30
|
+
* This allows multiple fragments to participate in the same Unit of Work.
|
|
31
|
+
*/
|
|
32
|
+
readonly contextStorage: RequestContextStorage<DatabaseContextStorage>;
|
|
19
33
|
/**
|
|
20
34
|
* Get current schema version, undefined if not initialized.
|
|
21
35
|
*/
|
|
22
36
|
getSchemaVersion(namespace: string): Promise<string | undefined>;
|
|
23
|
-
createQueryEngine: <const T extends AnySchema>(schema: T, namespace: string) =>
|
|
24
|
-
|
|
37
|
+
createQueryEngine: <const T extends AnySchema>(schema: T, namespace: string) => SimpleQueryInterface<T, TUOWConfig>;
|
|
38
|
+
prepareMigrations?: <const T extends AnySchema>(schema: T, namespace: string) => PreparedMigrations;
|
|
25
39
|
/**
|
|
26
40
|
* Generate a combined schema file from one or more fragments.
|
|
27
41
|
* If not implemented, schema generation is not supported for this adapter.
|
|
@@ -41,5 +55,5 @@ interface DatabaseAdapter<TUOWConfig = void> {
|
|
|
41
55
|
close: () => Promise<void>;
|
|
42
56
|
}
|
|
43
57
|
//#endregion
|
|
44
|
-
export { DatabaseAdapter, TableNameMapper, fragnoDatabaseAdapterNameFakeSymbol, fragnoDatabaseAdapterVersionFakeSymbol };
|
|
58
|
+
export { DatabaseAdapter, DatabaseContextStorage, TableNameMapper, fragnoDatabaseAdapterNameFakeSymbol, fragnoDatabaseAdapterVersionFakeSymbol };
|
|
45
59
|
//# sourceMappingURL=adapters.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapters.d.ts","names":[],"sources":["../../src/adapters/adapters.ts"],"sourcesContent":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"adapters.d.ts","names":[],"sources":["../../src/adapters/adapters.ts"],"sourcesContent":[],"mappings":";;;;;;;;cAOa;cACA;AADb;AACA;AAMA;AAOA;AAKiB,KAZL,sBAAA,GAYoB;EAC7B,GAAA,EAZI,WAYJ;CACA;;;;AAamC,UApBrB,eAAA,CAoBqB;EAC1B,UAAA,CAAA,WAAA,EAAA,MAAA,CAAA,EAAA,MAAA;EAEgB,SAAA,CAAA,YAAA,EAAA,MAAA,CAAA,EAAA,MAAA;;AAArB,UAlBU,eAkBV,CAAA,aAAA,IAAA,CAAA,CAAA;EAEgC,CAnBpC,mCAAA,CAmBoC,EAAA,MAAA;EAC3B,CAnBT,sCAAA,CAmBS,EAAA,MAAA;EAEL;;;;EAiBsB,SAAA,cAAA,EAhCF,qBAgCE,CAhCoB,sBAgCpB,CAAA;EAEd;;;uCA7BwB;sCAED,mBAC1B,yBAEL,qBAAqB,GAAG;uCAEQ,mBAC3B,yBAEL;;;;;;YAOkB;;;;QAElB;;;;;gDAMyC;6BAEnB;eAEd"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapters.js","names":[],"sources":["../../src/adapters/adapters.ts"],"sourcesContent":["import type {
|
|
1
|
+
{"version":3,"file":"adapters.js","names":[],"sources":["../../src/adapters/adapters.ts"],"sourcesContent":["import type { SimpleQueryInterface } from \"../query/simple-query-interface\";\nimport type { SchemaGenerator } from \"../schema-generator/schema-generator\";\nimport type { AnySchema } from \"../schema/create\";\nimport type { RequestContextStorage } from \"@fragno-dev/core/internal/request-context-storage\";\nimport type { IUnitOfWork } from \"../query/unit-of-work/unit-of-work\";\nimport type { PreparedMigrations } from \"./generic-sql/migration/prepared-migrations\";\n\nexport const fragnoDatabaseAdapterNameFakeSymbol = \"$fragno-database-adapter-name\" as const;\nexport const fragnoDatabaseAdapterVersionFakeSymbol = \"$fragno-database-adapter-version\" as const;\n\n/**\n * Storage type for database context - stores the Unit of Work.\n * This is shared across all fragments using the same adapter.\n */\nexport type DatabaseContextStorage = {\n uow: IUnitOfWork;\n};\n\n/**\n * Maps logical table names (used by fragment authors) to physical table names (with namespace suffix)\n */\nexport interface TableNameMapper {\n toPhysical(logicalName: string): string;\n toLogical(physicalName: string): string;\n}\n\nexport interface DatabaseAdapter<TUOWConfig = void> {\n [fragnoDatabaseAdapterNameFakeSymbol]: string;\n [fragnoDatabaseAdapterVersionFakeSymbol]: number;\n\n /**\n * Request context storage shared across all fragments using this adapter.\n * This allows multiple fragments to participate in the same Unit of Work.\n */\n readonly contextStorage: RequestContextStorage<DatabaseContextStorage>;\n\n /**\n * Get current schema version, undefined if not initialized.\n */\n getSchemaVersion(namespace: string): Promise<string | undefined>;\n\n createQueryEngine: <const T extends AnySchema>(\n schema: T,\n namespace: string,\n ) => SimpleQueryInterface<T, TUOWConfig>;\n\n prepareMigrations?: <const T extends AnySchema>(\n schema: T,\n namespace: string,\n ) => PreparedMigrations;\n\n /**\n * Generate a combined schema file from one or more fragments.\n * If not implemented, schema generation is not supported for this adapter.\n */\n createSchemaGenerator?: (\n fragments: { schema: AnySchema; namespace: string }[],\n options?: { path?: string },\n ) => SchemaGenerator;\n\n /**\n * Creates a table name mapper for the given namespace.\n * Used to convert between logical table names and physical table names.\n */\n createTableNameMapper: (namespace: string) => TableNameMapper;\n\n isConnectionHealthy: () => Promise<boolean>;\n\n close: () => Promise<void>;\n}\n"],"mappings":";AAOA,MAAa,sCAAsC;AACnD,MAAa,yCAAyC"}
|
|
@@ -1,26 +1,13 @@
|
|
|
1
1
|
import { AnySchema } from "../../schema/create.js";
|
|
2
|
-
import { AbstractQuery } from "../../query/query.js";
|
|
3
2
|
import { SchemaGenerator } from "../../schema-generator/schema-generator.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
3
|
+
import { TableNameMapper } from "../shared/table-name-mapper.js";
|
|
4
|
+
import { DatabaseAdapter } from "../adapters.js";
|
|
5
|
+
import { GenericSQLAdapter, GenericSQLOptions, UnitOfWorkConfig } from "../generic-sql/generic-sql-adapter.js";
|
|
7
6
|
|
|
8
7
|
//#region src/adapters/drizzle/drizzle-adapter.d.ts
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
provider: "sqlite" | "mysql" | "postgresql";
|
|
12
|
-
}
|
|
13
|
-
declare class DrizzleAdapter implements DatabaseAdapter<DrizzleUOWConfig> {
|
|
14
|
-
#private;
|
|
15
|
-
constructor(config: DrizzleConfig);
|
|
16
|
-
get [fragnoDatabaseAdapterNameFakeSymbol](): string;
|
|
17
|
-
get [fragnoDatabaseAdapterVersionFakeSymbol](): number;
|
|
18
|
-
close(): Promise<void>;
|
|
8
|
+
declare class DrizzleAdapter extends GenericSQLAdapter implements DatabaseAdapter<UnitOfWorkConfig> {
|
|
9
|
+
constructor(options: GenericSQLOptions);
|
|
19
10
|
createTableNameMapper(namespace: string): TableNameMapper;
|
|
20
|
-
get provider(): "sqlite" | "mysql" | "postgresql";
|
|
21
|
-
isConnectionHealthy(): Promise<boolean>;
|
|
22
|
-
getSchemaVersion(namespace: string): Promise<string | undefined>;
|
|
23
|
-
createQueryEngine<TSchema extends AnySchema>(schema: TSchema, namespace: string): AbstractQuery<TSchema, DrizzleUOWConfig>;
|
|
24
11
|
createSchemaGenerator(fragments: {
|
|
25
12
|
schema: AnySchema;
|
|
26
13
|
namespace: string;
|
|
@@ -29,5 +16,5 @@ declare class DrizzleAdapter implements DatabaseAdapter<DrizzleUOWConfig> {
|
|
|
29
16
|
}): SchemaGenerator;
|
|
30
17
|
}
|
|
31
18
|
//#endregion
|
|
32
|
-
export { DrizzleAdapter
|
|
19
|
+
export { DrizzleAdapter };
|
|
33
20
|
//# sourceMappingURL=drizzle-adapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drizzle-adapter.d.ts","names":[],"sources":["../../../src/adapters/drizzle/drizzle-adapter.ts"],"sourcesContent":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"drizzle-adapter.d.ts","names":[],"sources":["../../../src/adapters/drizzle/drizzle-adapter.ts"],"sourcesContent":[],"mappings":";;;;;;;cAYa,cAAA,SAAuB,iBAAA,YAA6B,gBAAgB;uBAC1D;4CAAiB;EAD3B,qBAAe,CAAA,SAAA,EAAA;IAAqD,MAAA,EAUxD,SAVwD;IAC1D,SAAA,EAAA,MAAA;EAAiB,CAAA,EAAA,EAAA,OAWnC,CAXmC,EAAA;IASf,IAAA,CAAA,EAAA,MAAA;EAEpB,CAAA,CAAA,EAAA,eAAA"}
|
|
@@ -1,61 +1,21 @@
|
|
|
1
1
|
import "../../schema/create.js";
|
|
2
|
-
import {
|
|
3
|
-
import { createSettingsManager, settingsSchema } from "../../shared/settings-schema.js";
|
|
4
|
-
import { createTableNameMapper } from "./shared.js";
|
|
2
|
+
import { createTableNameMapper } from "../shared/table-name-mapper.js";
|
|
5
3
|
import { generateSchema } from "./generate.js";
|
|
6
|
-
import {
|
|
7
|
-
import { createDrizzleConnectionPool } from "./drizzle-connection-pool.js";
|
|
8
|
-
import { sql } from "drizzle-orm";
|
|
4
|
+
import { GenericSQLAdapter } from "../generic-sql/generic-sql-adapter.js";
|
|
9
5
|
|
|
10
6
|
//#region src/adapters/drizzle/drizzle-adapter.ts
|
|
11
|
-
var DrizzleAdapter = class {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
#schemaNamespaceMap = /* @__PURE__ */ new WeakMap();
|
|
15
|
-
constructor(config) {
|
|
16
|
-
this.#connectionPool = createDrizzleConnectionPool(config.db);
|
|
17
|
-
this.#provider = config.provider;
|
|
18
|
-
}
|
|
19
|
-
get [fragnoDatabaseAdapterNameFakeSymbol]() {
|
|
20
|
-
return "drizzle";
|
|
21
|
-
}
|
|
22
|
-
get [fragnoDatabaseAdapterVersionFakeSymbol]() {
|
|
23
|
-
return 0;
|
|
24
|
-
}
|
|
25
|
-
async close() {
|
|
26
|
-
await this.#connectionPool.close();
|
|
7
|
+
var DrizzleAdapter = class extends GenericSQLAdapter {
|
|
8
|
+
constructor(options) {
|
|
9
|
+
super(options);
|
|
27
10
|
}
|
|
28
11
|
createTableNameMapper(namespace) {
|
|
29
|
-
return createTableNameMapper(namespace);
|
|
30
|
-
}
|
|
31
|
-
get provider() {
|
|
32
|
-
return this.#provider;
|
|
33
|
-
}
|
|
34
|
-
async isConnectionHealthy() {
|
|
35
|
-
const conn = await this.#connectionPool.connect();
|
|
36
|
-
try {
|
|
37
|
-
const result = await conn.db.execute(sql`SELECT 1 as healthy`);
|
|
38
|
-
if (Array.isArray(result)) return result.length > 0 && result[0]["healthy"] === 1;
|
|
39
|
-
else return result.rows[0]["healthy"] === 1;
|
|
40
|
-
} catch {
|
|
41
|
-
return false;
|
|
42
|
-
} finally {
|
|
43
|
-
await conn.release();
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
async getSchemaVersion(namespace) {
|
|
47
|
-
return (await createSettingsManager(this.createQueryEngine(settingsSchema, namespace), namespace).get("version"))?.value;
|
|
48
|
-
}
|
|
49
|
-
createQueryEngine(schema, namespace) {
|
|
50
|
-
this.#schemaNamespaceMap.set(schema, namespace);
|
|
51
|
-
const mapper = namespace ? createTableNameMapper(namespace) : void 0;
|
|
52
|
-
return fromDrizzle(schema, this.#connectionPool, this.#provider, mapper, void 0, this.#schemaNamespaceMap);
|
|
12
|
+
return createTableNameMapper(namespace, false);
|
|
53
13
|
}
|
|
54
14
|
createSchemaGenerator(fragments, options) {
|
|
55
15
|
return { generateSchema: (genOptions) => {
|
|
56
16
|
const path = genOptions?.path ?? options?.path ?? "fragno-schema.ts";
|
|
57
17
|
return {
|
|
58
|
-
schema: generateSchema(fragments, this
|
|
18
|
+
schema: generateSchema(fragments, this.driverConfig.databaseType, { mapperFactory: (ns) => ns ? this.createTableNameMapper(ns) : void 0 }),
|
|
59
19
|
path
|
|
60
20
|
};
|
|
61
21
|
} };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drizzle-adapter.js","names":[
|
|
1
|
+
{"version":3,"file":"drizzle-adapter.js","names":[],"sources":["../../../src/adapters/drizzle/drizzle-adapter.ts"],"sourcesContent":["import type { DatabaseAdapter } from \"../adapters\";\nimport { type AnySchema } from \"../../schema/create\";\nimport type { SchemaGenerator } from \"../../schema-generator/schema-generator\";\nimport { generateSchema } from \"./generate\";\nimport { createTableNameMapper } from \"../shared/table-name-mapper\";\n\nimport {\n GenericSQLAdapter,\n type GenericSQLOptions,\n type UnitOfWorkConfig,\n} from \"../generic-sql/generic-sql-adapter\";\n\nexport class DrizzleAdapter extends GenericSQLAdapter implements DatabaseAdapter<UnitOfWorkConfig> {\n constructor(options: GenericSQLOptions) {\n super(options);\n }\n\n override createTableNameMapper(namespace: string) {\n return createTableNameMapper(namespace, false);\n }\n\n createSchemaGenerator(\n fragments: { schema: AnySchema; namespace: string }[],\n options?: { path?: string },\n ): SchemaGenerator {\n return {\n generateSchema: (genOptions) => {\n const path = genOptions?.path ?? options?.path ?? \"fragno-schema.ts\";\n\n return {\n schema: generateSchema(fragments, this.driverConfig.databaseType, {\n mapperFactory: (ns) => (ns ? this.createTableNameMapper(ns) : undefined),\n }),\n path,\n };\n },\n };\n }\n}\n"],"mappings":";;;;;;AAYA,IAAa,iBAAb,cAAoC,kBAA+D;CACjG,YAAY,SAA4B;AACtC,QAAM,QAAQ;;CAGhB,AAAS,sBAAsB,WAAmB;AAChD,SAAO,sBAAsB,WAAW,MAAM;;CAGhD,sBACE,WACA,SACiB;AACjB,SAAO,EACL,iBAAiB,eAAe;GAC9B,MAAM,OAAO,YAAY,QAAQ,SAAS,QAAQ;AAElD,UAAO;IACL,QAAQ,eAAe,WAAW,KAAK,aAAa,cAAc,EAChE,gBAAgB,OAAQ,KAAK,KAAK,sBAAsB,GAAG,GAAG,QAC/D,CAAC;IACF;IACD;KAEJ"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { AnySchema } from "../../schema/create.js";
|
|
2
|
+
import { TableNameMapper } from "../shared/table-name-mapper.js";
|
|
2
3
|
import { SQLProvider } from "../../shared/providers.js";
|
|
3
4
|
|
|
4
5
|
//#region src/adapters/drizzle/generate.d.ts
|
|
@@ -11,9 +12,14 @@ interface GenerateSchemaOptions {
|
|
|
11
12
|
/** Module to import from */
|
|
12
13
|
from: string;
|
|
13
14
|
};
|
|
15
|
+
/** Optional mapper factory for creating table name mappers with custom sanitization */
|
|
16
|
+
mapperFactory?: (namespace: string | undefined) => TableNameMapper | undefined;
|
|
14
17
|
}
|
|
15
18
|
/**
|
|
16
|
-
* Generate a
|
|
19
|
+
* Generate a settings table for storing fragment versions
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* Generate a schema file from one or more fragments with automatic de-duplication
|
|
17
23
|
*/
|
|
18
24
|
declare function generateSchema(fragments: {
|
|
19
25
|
namespace: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.d.ts","names":[],"sources":["../../../src/adapters/drizzle/generate.ts"],"sourcesContent":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generate.d.ts","names":[],"sources":["../../../src/adapters/drizzle/generate.ts"],"sourcesContent":[],"mappings":";;;;;KAkCY,iBAAA,GAAoB,QAAQ;UAulBvB,qBAAA;EAvlBL;EAulBK,iBAAA,CAAA,EAAA;IAkBD;IAC0B,IAAA,EAAA,MAAA;IAC9B;IACA,IAAA,EAAA,MAAA;EAAqB,CAAA;;qDAZoB;;;;;;;;iBASrC,cAAA;;UAC0B;eAC9B,6BACA"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { InternalIdColumn } from "../../schema/create.js";
|
|
2
|
-
import { schemaToDBType } from "../../schema/serialize.js";
|
|
3
|
-
import { SETTINGS_TABLE_NAME, settingsSchema } from "../../shared/settings-schema.js";
|
|
4
2
|
import { importGenerator } from "../../util/import-generator.js";
|
|
5
3
|
import { ident, parseVarchar } from "../../util/parse.js";
|
|
6
|
-
import { createTableNameMapper, sanitizeNamespace } from "
|
|
4
|
+
import { createTableNameMapper, sanitizeNamespace } from "../shared/table-name-mapper.js";
|
|
5
|
+
import { createSQLTypeMapper } from "../../schema/type-conversion/create-sql-type-mapper.js";
|
|
7
6
|
|
|
8
7
|
//#region src/adapters/drizzle/generate.ts
|
|
9
8
|
const PROVIDER_IMPORTS = {
|
|
@@ -51,7 +50,7 @@ function generateBinaryCustomType(ctx, customTypes) {
|
|
|
51
50
|
const code = generateCustomType(ctx, name, {
|
|
52
51
|
dataType: "Uint8Array",
|
|
53
52
|
driverDataType: "Buffer",
|
|
54
|
-
databaseDataType:
|
|
53
|
+
databaseDataType: createSQLTypeMapper(ctx.provider).getDatabaseType({ type: "binary" }),
|
|
55
54
|
fromDriverCode: "return new Uint8Array(value.buffer, value.byteOffset, value.byteLength)",
|
|
56
55
|
toDriverCode: `return value instanceof Buffer? value : Buffer.from(value)`
|
|
57
56
|
});
|
|
@@ -60,10 +59,10 @@ function generateBinaryCustomType(ctx, customTypes) {
|
|
|
60
59
|
}
|
|
61
60
|
/**
|
|
62
61
|
* Maps SQL database types to Drizzle function names and parameters.
|
|
63
|
-
* Uses
|
|
62
|
+
* Uses SQLTypeMapper as the source of truth for type conversion.
|
|
64
63
|
*/
|
|
65
64
|
function getColumnTypeFunction(ctx, column, customTypes) {
|
|
66
|
-
return mapDBTypeToDrizzleFunction(ctx,
|
|
65
|
+
return mapDBTypeToDrizzleFunction(ctx, createSQLTypeMapper(ctx.provider).getDatabaseType(column), column, customTypes);
|
|
67
66
|
}
|
|
68
67
|
/**
|
|
69
68
|
* Maps a database type string to a Drizzle function name and parameters.
|
|
@@ -100,7 +99,11 @@ function mapDBTypeToDrizzleFunction(ctx, dbType, column, customTypes) {
|
|
|
100
99
|
name: generateBinaryCustomType(ctx, customTypes),
|
|
101
100
|
isCustomType: true
|
|
102
101
|
};
|
|
103
|
-
case "bigint": return {
|
|
102
|
+
case "bigint": return {
|
|
103
|
+
name: "bigint",
|
|
104
|
+
params: [`{ mode: "number" }`]
|
|
105
|
+
};
|
|
106
|
+
case "integer": return { name: "int" };
|
|
104
107
|
default:
|
|
105
108
|
if (dbType.startsWith("varchar(")) return {
|
|
106
109
|
name: "varchar",
|
|
@@ -139,6 +142,13 @@ function mapDBTypeToDrizzleFunction(ctx, dbType, column, customTypes) {
|
|
|
139
142
|
}
|
|
140
143
|
return { name: dbType };
|
|
141
144
|
}
|
|
145
|
+
/**
|
|
146
|
+
* Get the physical table name (with namespace suffix) using the mapper if available
|
|
147
|
+
*/
|
|
148
|
+
function getPhysicalTableName(logicalName, namespace, mapper) {
|
|
149
|
+
if (!namespace) return logicalName;
|
|
150
|
+
return mapper ? mapper.toPhysical(logicalName) : `${logicalName}_${sanitizeNamespace(namespace)}`;
|
|
151
|
+
}
|
|
142
152
|
function generateColumnDefinition(ctx, column, customTypes) {
|
|
143
153
|
const parts = [];
|
|
144
154
|
const typeFn = getColumnTypeFunction(ctx, column, customTypes);
|
|
@@ -177,8 +187,7 @@ function generateColumnDefinition(ctx, column, customTypes) {
|
|
|
177
187
|
function generateAllColumns(ctx, table, customTypes) {
|
|
178
188
|
return Object.values(table.columns).map((column) => generateColumnDefinition(ctx, column, customTypes));
|
|
179
189
|
}
|
|
180
|
-
function generateForeignKeys(ctx, table, namespace) {
|
|
181
|
-
const mapper = namespace ? createTableNameMapper(namespace) : void 0;
|
|
190
|
+
function generateForeignKeys(ctx, table, namespace, mapper) {
|
|
182
191
|
const keys = [];
|
|
183
192
|
for (const relation of Object.values(table.relations)) {
|
|
184
193
|
if (relation.type === "many") continue;
|
|
@@ -219,21 +228,21 @@ function generateIndexes(ctx, table, namespace) {
|
|
|
219
228
|
}
|
|
220
229
|
return indexes;
|
|
221
230
|
}
|
|
222
|
-
function generateTableConstraints(ctx, table, namespace) {
|
|
223
|
-
return [...generateForeignKeys(ctx, table, namespace), ...generateIndexes(ctx, table, namespace)];
|
|
231
|
+
function generateTableConstraints(ctx, table, namespace, mapper) {
|
|
232
|
+
return [...generateForeignKeys(ctx, table, namespace, mapper), ...generateIndexes(ctx, table, namespace)];
|
|
224
233
|
}
|
|
225
|
-
function generateTable(ctx, table, customTypes, namespace) {
|
|
234
|
+
function generateTable(ctx, table, customTypes, namespace, mapper) {
|
|
226
235
|
const tableFn = PROVIDER_TABLE_FUNCTIONS[ctx.provider];
|
|
227
236
|
ctx.imports.addImport(tableFn, ctx.importSource);
|
|
228
237
|
const columns = generateAllColumns(ctx, table, customTypes);
|
|
229
|
-
const constraints = generateTableConstraints(ctx, table, namespace);
|
|
230
|
-
const physicalTableName =
|
|
231
|
-
const exportName =
|
|
238
|
+
const constraints = generateTableConstraints(ctx, table, namespace, mapper);
|
|
239
|
+
const physicalTableName = getPhysicalTableName(table.ormName, namespace, mapper);
|
|
240
|
+
const exportName = namespace ? `${table.ormName}_${sanitizeNamespace(namespace)}` : table.ormName;
|
|
232
241
|
const args = [`"${physicalTableName}"`, `{\n${columns.join(",\n")}\n}`];
|
|
233
242
|
if (constraints.length > 0) args.push(`(table) => [\n${ident(constraints.join(",\n"))}\n]`);
|
|
234
243
|
return `export const ${exportName} = ${tableFn}(${args.join(", ")})`;
|
|
235
244
|
}
|
|
236
|
-
function generateRelation(ctx, table, namespace, inverseRelations) {
|
|
245
|
+
function generateRelation(ctx, table, namespace, inverseRelations, _mapper) {
|
|
237
246
|
const relations = [];
|
|
238
247
|
let hasOne = false;
|
|
239
248
|
let hasMany = false;
|
|
@@ -244,10 +253,10 @@ function generateRelation(ctx, table, namespace, inverseRelations) {
|
|
|
244
253
|
if (relation.type === "one") {
|
|
245
254
|
const fields = [];
|
|
246
255
|
const references = [];
|
|
247
|
-
const tableRef
|
|
256
|
+
const tableRef = namespace ? `${table.ormName}_${sanitizeNamespace(namespace)}` : table.ormName;
|
|
248
257
|
const relatedTableRef = namespace ? `${relation.table.ormName}_${sanitizeNamespace(namespace)}` : relation.table.ormName;
|
|
249
258
|
for (const [left, right] of relation.on) {
|
|
250
|
-
fields.push(`${tableRef
|
|
259
|
+
fields.push(`${tableRef}.${left}`);
|
|
251
260
|
const actualRight = right === "id" ? "_internalId" : right;
|
|
252
261
|
references.push(`${relatedTableRef}.${actualRight}`);
|
|
253
262
|
}
|
|
@@ -271,10 +280,10 @@ function generateRelation(ctx, table, namespace, inverseRelations) {
|
|
|
271
280
|
if (hasOne) params.push("one");
|
|
272
281
|
if (hasMany) params.push("many");
|
|
273
282
|
const relationParams = params.length > 0 ? `{ ${params.join(", ")} }` : "{}";
|
|
274
|
-
const
|
|
275
|
-
const relationsName = namespace ? `${
|
|
283
|
+
const exportTableRef = namespace ? `${table.ormName}_${sanitizeNamespace(namespace)}` : table.ormName;
|
|
284
|
+
const relationsName = namespace ? `${exportTableRef}Relations` : `${table.ormName}Relations`;
|
|
276
285
|
ctx.imports.addImport("relations", "drizzle-orm");
|
|
277
|
-
return `export const ${relationsName} = relations(${
|
|
286
|
+
return `export const ${relationsName} = relations(${exportTableRef}, (${relationParams}) => ({
|
|
278
287
|
${relations.join(",\n")}
|
|
279
288
|
}));`;
|
|
280
289
|
}
|
|
@@ -282,19 +291,19 @@ ${relations.join(",\n")}
|
|
|
282
291
|
* Generate a schema export object for a fragment
|
|
283
292
|
* This groups all tables by their logical names for easier access
|
|
284
293
|
*/
|
|
285
|
-
function generateFragmentSchemaExport(schema, namespace, tablesWithRelations) {
|
|
294
|
+
function generateFragmentSchemaExport(schema, namespace, tablesWithRelations, _mapper) {
|
|
286
295
|
const drizzleEntries = [];
|
|
287
296
|
for (const table of Object.values(schema.tables)) {
|
|
288
|
-
const
|
|
289
|
-
drizzleEntries.push(` ${
|
|
297
|
+
const exportName = namespace ? `${table.ormName}_${sanitizeNamespace(namespace)}` : table.ormName;
|
|
298
|
+
drizzleEntries.push(` ${exportName}: ${exportName}`);
|
|
290
299
|
if (tablesWithRelations?.has(table.name)) {
|
|
291
|
-
const relationsName = namespace ? `${
|
|
300
|
+
const relationsName = namespace ? `${exportName}Relations` : `${table.ormName}Relations`;
|
|
292
301
|
drizzleEntries.push(` ${relationsName}: ${relationsName}`);
|
|
293
302
|
}
|
|
294
303
|
if (namespace) {
|
|
295
|
-
drizzleEntries.push(` ${table.ormName}: ${
|
|
304
|
+
drizzleEntries.push(` ${table.ormName}: ${exportName}`);
|
|
296
305
|
if (tablesWithRelations?.has(table.name)) {
|
|
297
|
-
const physicalRelationsName = `${
|
|
306
|
+
const physicalRelationsName = `${exportName}Relations`;
|
|
298
307
|
const aliasRelationsName = `${table.ormName}Relations`;
|
|
299
308
|
drizzleEntries.push(` ${aliasRelationsName}: ${physicalRelationsName}`);
|
|
300
309
|
}
|
|
@@ -306,33 +315,23 @@ function generateFragmentSchemaExport(schema, namespace, tablesWithRelations) {
|
|
|
306
315
|
/**
|
|
307
316
|
* Generate a settings table for storing fragment versions
|
|
308
317
|
*/
|
|
309
|
-
function generateSettingsTable(ctx) {
|
|
310
|
-
const settingsTable = settingsSchema.tables[SETTINGS_TABLE_NAME];
|
|
311
|
-
return generateTable(ctx, settingsTable, []);
|
|
312
|
-
}
|
|
313
318
|
/**
|
|
314
|
-
* Generate a schema file from one or more fragments with
|
|
319
|
+
* Generate a schema file from one or more fragments with automatic de-duplication
|
|
315
320
|
*/
|
|
316
321
|
function generateSchema(fragments, provider, options) {
|
|
317
322
|
const ctx = createContext(provider, options?.idGeneratorImport);
|
|
318
323
|
const customTypes = [];
|
|
319
324
|
const sections = [];
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
sections.push("// Settings Table (shared across all fragments)");
|
|
323
|
-
sections.push("// ============================================================================");
|
|
324
|
-
sections.push("");
|
|
325
|
-
sections.push(generateSettingsTable(ctx));
|
|
326
|
-
sections.push("");
|
|
327
|
-
sections.push(`export const fragnoDbSettingSchemaVersion = ${settingsSchema.version};`);
|
|
328
|
-
for (const { namespace, schema } of fragments) {
|
|
325
|
+
const getMapper = options?.mapperFactory || ((ns) => ns ? createTableNameMapper(ns, true) : void 0);
|
|
326
|
+
for (const { schema, namespace } of fragments) {
|
|
329
327
|
const fragmentTables = [];
|
|
328
|
+
const mapper = getMapper(namespace);
|
|
330
329
|
fragmentTables.push("");
|
|
331
330
|
fragmentTables.push("// ============================================================================");
|
|
332
331
|
fragmentTables.push(`// Fragment: ${namespace}`);
|
|
333
332
|
fragmentTables.push("// ============================================================================");
|
|
334
333
|
for (const table of Object.values(schema.tables)) {
|
|
335
|
-
const tableCode = generateTable(ctx, table, customTypes, namespace);
|
|
334
|
+
const tableCode = generateTable(ctx, table, customTypes, namespace, mapper);
|
|
336
335
|
fragmentTables.push("");
|
|
337
336
|
fragmentTables.push(tableCode);
|
|
338
337
|
}
|
|
@@ -347,15 +346,17 @@ function generateSchema(fragments, provider, options) {
|
|
|
347
346
|
}
|
|
348
347
|
const tablesWithRelations = /* @__PURE__ */ new Set();
|
|
349
348
|
for (const table of Object.values(schema.tables)) {
|
|
350
|
-
const relationCode = generateRelation(ctx, table, namespace, inverseRelations.get(table.name));
|
|
349
|
+
const relationCode = generateRelation(ctx, table, namespace, inverseRelations.get(table.name), mapper);
|
|
351
350
|
if (relationCode) {
|
|
352
351
|
fragmentTables.push("");
|
|
353
352
|
fragmentTables.push(relationCode);
|
|
354
353
|
tablesWithRelations.add(table.name);
|
|
355
354
|
}
|
|
356
355
|
}
|
|
357
|
-
|
|
358
|
-
|
|
356
|
+
if (namespace !== "") {
|
|
357
|
+
fragmentTables.push("");
|
|
358
|
+
fragmentTables.push(generateFragmentSchemaExport(schema, namespace, tablesWithRelations, mapper));
|
|
359
|
+
}
|
|
359
360
|
sections.push(...fragmentTables);
|
|
360
361
|
}
|
|
361
362
|
return [
|