@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/dist/fragment.js
DELETED
|
@@ -1,191 +0,0 @@
|
|
|
1
|
-
import { bindServicesToContext } from "./bind-services.js";
|
|
2
|
-
import { AsyncLocalStorage } from "async_hooks";
|
|
3
|
-
|
|
4
|
-
//#region src/fragment.ts
|
|
5
|
-
const uowStorage = new AsyncLocalStorage();
|
|
6
|
-
const serviceContext = { getUnitOfWork(schema) {
|
|
7
|
-
const uow = uowStorage.getStore();
|
|
8
|
-
if (!uow) throw new Error("No UnitOfWork in context. Service must be called within a route handler.");
|
|
9
|
-
if (schema) return uow.forSchema(schema);
|
|
10
|
-
return uow;
|
|
11
|
-
} };
|
|
12
|
-
function withUnitOfWork(uow, callback) {
|
|
13
|
-
return Promise.resolve(uowStorage.run(uow, callback));
|
|
14
|
-
}
|
|
15
|
-
var DatabaseFragmentBuilder = class DatabaseFragmentBuilder {
|
|
16
|
-
$types;
|
|
17
|
-
#name;
|
|
18
|
-
#schema;
|
|
19
|
-
#namespace;
|
|
20
|
-
#dependencies;
|
|
21
|
-
#services;
|
|
22
|
-
#usedServices;
|
|
23
|
-
#providedServices;
|
|
24
|
-
constructor(options) {
|
|
25
|
-
this.#name = options.name;
|
|
26
|
-
this.#schema = options.schema;
|
|
27
|
-
this.#namespace = options.namespace;
|
|
28
|
-
this.#dependencies = options.dependencies;
|
|
29
|
-
this.#services = options.services;
|
|
30
|
-
this.#usedServices = options.usedServices;
|
|
31
|
-
this.#providedServices = options.providedServices;
|
|
32
|
-
}
|
|
33
|
-
get $requiredOptions() {
|
|
34
|
-
throw new Error("Type only method. Do not call.");
|
|
35
|
-
}
|
|
36
|
-
get definition() {
|
|
37
|
-
const schema = this.#schema;
|
|
38
|
-
const namespace = this.#namespace ?? "";
|
|
39
|
-
const name = this.#name;
|
|
40
|
-
const dependencies = this.#dependencies;
|
|
41
|
-
const services = this.#services;
|
|
42
|
-
const providedServices = this.#providedServices;
|
|
43
|
-
return {
|
|
44
|
-
name,
|
|
45
|
-
dependencies: (config, options) => {
|
|
46
|
-
const dbContext = this.#createDatabaseContext(options, schema, namespace, name);
|
|
47
|
-
return dependencies?.({
|
|
48
|
-
config,
|
|
49
|
-
fragnoConfig: options,
|
|
50
|
-
...dbContext
|
|
51
|
-
}) ?? {};
|
|
52
|
-
},
|
|
53
|
-
services: (config, options, deps) => {
|
|
54
|
-
const dbContext = this.#createDatabaseContext(options, schema, namespace, name);
|
|
55
|
-
const defineService = (services$1) => services$1;
|
|
56
|
-
return bindServicesToContext(services?.({
|
|
57
|
-
config,
|
|
58
|
-
fragnoConfig: options,
|
|
59
|
-
deps,
|
|
60
|
-
defineService,
|
|
61
|
-
...dbContext
|
|
62
|
-
}) ?? {});
|
|
63
|
-
},
|
|
64
|
-
additionalContext: {
|
|
65
|
-
databaseSchema: schema,
|
|
66
|
-
databaseNamespace: namespace
|
|
67
|
-
},
|
|
68
|
-
createHandlerWrapper: schema ? (options) => {
|
|
69
|
-
const { orm } = this.#createDatabaseContext(options, schema, namespace, name);
|
|
70
|
-
return (handler) => {
|
|
71
|
-
return async (inputContext, outputContext) => {
|
|
72
|
-
return withUnitOfWork(orm.createUnitOfWork(), async () => {
|
|
73
|
-
return handler.bind(serviceContext)(inputContext, outputContext);
|
|
74
|
-
});
|
|
75
|
-
};
|
|
76
|
-
};
|
|
77
|
-
} : void 0,
|
|
78
|
-
usedServices: this.#usedServices,
|
|
79
|
-
providedServices
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
#createDatabaseContext(options, schema, namespace, name) {
|
|
83
|
-
const databaseAdapter = options.databaseAdapter;
|
|
84
|
-
if (!databaseAdapter) throw new Error(`Fragment '${name}' requires a database adapter in options.databaseAdapter`);
|
|
85
|
-
if (!schema) throw new Error(`Fragment '${name}' requires a schema. Use withDatabase() to provide one.`);
|
|
86
|
-
return {
|
|
87
|
-
databaseAdapter,
|
|
88
|
-
orm: databaseAdapter.createQueryEngine(schema, namespace)
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
withDatabase(schema, namespace) {
|
|
92
|
-
return new DatabaseFragmentBuilder({
|
|
93
|
-
name: this.#name,
|
|
94
|
-
schema,
|
|
95
|
-
namespace: namespace ?? this.#name + "-db",
|
|
96
|
-
dependencies: this.#dependencies,
|
|
97
|
-
services: this.#services,
|
|
98
|
-
usedServices: this.#usedServices,
|
|
99
|
-
providedServices: this.#providedServices
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
withDependencies(fn) {
|
|
103
|
-
return new DatabaseFragmentBuilder({
|
|
104
|
-
name: this.#name,
|
|
105
|
-
schema: this.#schema,
|
|
106
|
-
namespace: this.#namespace,
|
|
107
|
-
dependencies: fn,
|
|
108
|
-
services: void 0,
|
|
109
|
-
usedServices: this.#usedServices,
|
|
110
|
-
providedServices: this.#providedServices
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
usesService(serviceName, options) {
|
|
114
|
-
const isOptional = options?.optional ?? false;
|
|
115
|
-
return new DatabaseFragmentBuilder({
|
|
116
|
-
name: this.#name,
|
|
117
|
-
schema: this.#schema,
|
|
118
|
-
namespace: this.#namespace,
|
|
119
|
-
dependencies: this.#dependencies,
|
|
120
|
-
services: this.#services,
|
|
121
|
-
usedServices: {
|
|
122
|
-
...this.#usedServices,
|
|
123
|
-
[serviceName]: {
|
|
124
|
-
name: serviceName,
|
|
125
|
-
required: !isOptional
|
|
126
|
-
}
|
|
127
|
-
},
|
|
128
|
-
providedServices: this.#providedServices
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
providesService(...args) {
|
|
132
|
-
if (args.length === 1) {
|
|
133
|
-
const [fn] = args;
|
|
134
|
-
const servicesCallback = (context) => {
|
|
135
|
-
const defineService = (services) => services;
|
|
136
|
-
return fn({
|
|
137
|
-
config: context.config,
|
|
138
|
-
fragnoConfig: context.fragnoConfig,
|
|
139
|
-
deps: context.deps,
|
|
140
|
-
db: context.orm,
|
|
141
|
-
defineService
|
|
142
|
-
});
|
|
143
|
-
};
|
|
144
|
-
return new DatabaseFragmentBuilder({
|
|
145
|
-
name: this.#name,
|
|
146
|
-
schema: this.#schema,
|
|
147
|
-
namespace: this.#namespace,
|
|
148
|
-
dependencies: this.#dependencies,
|
|
149
|
-
services: servicesCallback,
|
|
150
|
-
usedServices: this.#usedServices,
|
|
151
|
-
providedServices: this.#providedServices
|
|
152
|
-
});
|
|
153
|
-
} else {
|
|
154
|
-
const [serviceName, fnOrService] = args;
|
|
155
|
-
const createService = (config, options, deps) => {
|
|
156
|
-
const dbContext = this.#createDatabaseContext(options, this.#schema, this.#namespace ?? "", this.#name);
|
|
157
|
-
let implementation;
|
|
158
|
-
if (typeof fnOrService === "function") {
|
|
159
|
-
const defineService = (services) => services;
|
|
160
|
-
implementation = fnOrService({
|
|
161
|
-
config,
|
|
162
|
-
fragnoConfig: options,
|
|
163
|
-
deps,
|
|
164
|
-
db: dbContext.orm,
|
|
165
|
-
defineService
|
|
166
|
-
});
|
|
167
|
-
} else implementation = fnOrService;
|
|
168
|
-
return bindServicesToContext(implementation);
|
|
169
|
-
};
|
|
170
|
-
return new DatabaseFragmentBuilder({
|
|
171
|
-
name: this.#name,
|
|
172
|
-
schema: this.#schema,
|
|
173
|
-
namespace: this.#namespace,
|
|
174
|
-
dependencies: this.#dependencies,
|
|
175
|
-
services: this.#services,
|
|
176
|
-
usedServices: this.#usedServices,
|
|
177
|
-
providedServices: {
|
|
178
|
-
...this.#providedServices,
|
|
179
|
-
[serviceName]: createService
|
|
180
|
-
}
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
};
|
|
185
|
-
function defineFragmentWithDatabase(name) {
|
|
186
|
-
return new DatabaseFragmentBuilder({ name });
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
//#endregion
|
|
190
|
-
export { DatabaseFragmentBuilder, bindServicesToContext, defineFragmentWithDatabase, serviceContext, uowStorage, withUnitOfWork };
|
|
191
|
-
//# sourceMappingURL=fragment.js.map
|
package/dist/fragment.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fragment.js","names":["serviceContext: DatabaseRequestThisContext","#name","#schema","#namespace","#dependencies","#services","#usedServices","#providedServices","#createDatabaseContext","services","implementation: TService"],"sources":["../src/fragment.ts"],"sourcesContent":["import type { AnySchema } from \"./schema/create\";\nimport type { AbstractQuery } from \"./query/query\";\nimport type { DatabaseAdapter } from \"./adapters/adapters\";\nimport { bindServicesToContext, type BoundServices } from \"./bind-services\";\nimport { AsyncLocalStorage } from \"async_hooks\";\nimport type { IUnitOfWorkBase, UnitOfWorkSchemaView } from \"./query/unit-of-work\";\nimport type { RequestThisContext } from \"@fragno-dev/core/api\";\n\nexport const uowStorage = new AsyncLocalStorage<IUnitOfWorkBase>();\n\n/**\n * Service context for database fragments, providing access to the Unit of Work.\n */\nexport interface DatabaseRequestThisContext extends RequestThisContext {\n /**\n * Get the Unit of Work from the current context.\n * @param schema - Optional schema to get a typed view. If not provided, returns the base UOW.\n * @returns IUnitOfWorkBase if no schema provided, or typed UnitOfWorkSchemaView if schema provided.\n */\n getUnitOfWork(): IUnitOfWorkBase;\n getUnitOfWork<TSchema extends AnySchema>(\n schema: TSchema,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): UnitOfWorkSchemaView<TSchema, [], any>;\n}\n\nexport const serviceContext: DatabaseRequestThisContext = {\n getUnitOfWork<TSchema extends AnySchema>(\n schema?: TSchema,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): any {\n const uow = uowStorage.getStore();\n if (!uow) {\n throw new Error(\"No UnitOfWork in context. Service must be called within a route handler.\");\n }\n if (schema) {\n return uow.forSchema(schema);\n }\n return uow;\n },\n};\n\nexport function withUnitOfWork<T>(uow: IUnitOfWorkBase, callback: () => T): Promise<T> {\n return Promise.resolve(uowStorage.run(uow, callback));\n}\n\n/**\n * Type helper that enforces DatabaseRequestThisContext on all functions in a service object\n */\ntype WithDatabaseThis<T> = {\n [K in keyof T]: T[K] extends (...args: infer A) => infer R\n ? (this: DatabaseRequestThisContext, ...args: A) => R\n : T[K] extends Record<string, unknown>\n ? WithDatabaseThis<T[K]>\n : T[K];\n};\n\n// Import types from fragno package\nimport type {\n FragmentDefinition,\n RouteHandler,\n FragnoPublicConfig,\n RequestInputContext,\n RequestOutputContext,\n} from \"@fragno-dev/core\";\n\nexport { bindServicesToContext, type BoundServices };\n\n/**\n * Route handler type for database fragments with access to Unit of Work.\n */\nexport type DatabaseRouteHandler = (\n this: DatabaseRequestThisContext,\n inputContext: RequestInputContext,\n outputContext: RequestOutputContext,\n) => Promise<Response>;\n\n/**\n * Extended FragnoPublicConfig that includes a database adapter.\n * Use this type when creating fragments with database support.\n */\nexport type FragnoPublicConfigWithDatabase = FragnoPublicConfig & {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n databaseAdapter: DatabaseAdapter<any>;\n};\n\n/**\n * Additional context provided to database fragments containing the database adapter and ORM instance.\n */\nexport type DatabaseFragmentContext<TSchema extends AnySchema> = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n databaseAdapter: DatabaseAdapter<any>;\n orm: AbstractQuery<TSchema>;\n};\n\nexport class DatabaseFragmentBuilder<\n const TSchema extends AnySchema,\n const TConfig,\n const TDeps = {},\n const TServices = {},\n const TUsedServices = {},\n const TProvidedServices = {},\n> {\n // Type-only property to expose type parameters for better inference\n readonly $types!: {\n schema: TSchema;\n config: TConfig;\n deps: TDeps;\n services: TServices;\n usedServices: TUsedServices;\n providedServices: TProvidedServices;\n };\n\n #name: string;\n #schema?: TSchema;\n #namespace?: string;\n #dependencies?: (\n context: {\n config: TConfig;\n fragnoConfig: FragnoPublicConfig;\n } & DatabaseFragmentContext<TSchema>,\n ) => TDeps;\n #services?: (\n context: {\n config: TConfig;\n fragnoConfig: FragnoPublicConfig;\n deps: TDeps & TUsedServices;\n defineService: <T extends Record<string, unknown>>(\n services: WithDatabaseThis<T>,\n ) => WithDatabaseThis<T>;\n } & DatabaseFragmentContext<TSchema>,\n ) => TServices;\n #usedServices?: Record<string, { name: string; required: boolean }>;\n #providedServices?: Record<string, unknown>;\n\n constructor(options: {\n name: string;\n schema?: TSchema;\n namespace?: string;\n dependencies?: (\n context: {\n config: TConfig;\n fragnoConfig: FragnoPublicConfig;\n } & DatabaseFragmentContext<TSchema>,\n ) => TDeps;\n services?: (\n context: {\n config: TConfig;\n fragnoConfig: FragnoPublicConfig;\n deps: TDeps & TUsedServices;\n defineService: <T extends Record<string, unknown>>(\n services: WithDatabaseThis<T>,\n ) => WithDatabaseThis<T>;\n } & DatabaseFragmentContext<TSchema>,\n ) => TServices;\n usedServices?: Record<string, { name: string; required: boolean }>;\n providedServices?: Record<string, unknown>;\n }) {\n this.#name = options.name;\n this.#schema = options.schema;\n this.#namespace = options.namespace;\n this.#dependencies = options.dependencies;\n this.#services = options.services;\n this.#usedServices = options.usedServices;\n this.#providedServices = options.providedServices;\n }\n\n get $requiredOptions(): FragnoPublicConfigWithDatabase {\n throw new Error(\"Type only method. Do not call.\");\n }\n\n get definition(): FragmentDefinition<\n TConfig,\n TDeps,\n BoundServices<TServices>,\n { databaseSchema?: TSchema; databaseNamespace: string },\n BoundServices<TUsedServices>,\n BoundServices<TProvidedServices>,\n DatabaseRequestThisContext\n > {\n const schema = this.#schema;\n const namespace = this.#namespace ?? \"\";\n const name = this.#name;\n const dependencies = this.#dependencies;\n const services = this.#services;\n const providedServices = this.#providedServices;\n\n return {\n name,\n dependencies: (config: TConfig, options: FragnoPublicConfig) => {\n const dbContext = this.#createDatabaseContext(options, schema, namespace, name);\n return dependencies?.({ config, fragnoConfig: options, ...dbContext }) ?? ({} as TDeps);\n },\n services: (\n config: TConfig,\n options: FragnoPublicConfig,\n deps: TDeps & BoundServices<TUsedServices>,\n ) => {\n const dbContext = this.#createDatabaseContext(options, schema, namespace, name);\n // Cast deps back to raw type for internal services function.\n // This is safe because:\n // 1. deps are already bound (their 'this' parameters are stripped)\n // 2. The services function expects raw types but only uses the public API\n // 3. BoundServices<T> has the same runtime shape as T (just without 'this')\n\n // defineService provides typing for service functions\n // It expects the input to already have proper 'this' types on functions\n const defineService = <T extends Record<string, unknown>>(\n services: WithDatabaseThis<T>,\n ): WithDatabaseThis<T> => services;\n\n const rawServices =\n services?.({\n config,\n fragnoConfig: options,\n deps: deps as TDeps & TUsedServices,\n defineService,\n ...dbContext,\n }) ?? ({} as TServices);\n\n // Bind all service methods to serviceContext\n return bindServicesToContext(\n rawServices as Record<string, unknown>,\n ) as BoundServices<TServices>;\n },\n additionalContext: {\n databaseSchema: schema,\n databaseNamespace: namespace,\n },\n createHandlerWrapper: schema\n ? (options: FragnoPublicConfig) => {\n const dbContext = this.#createDatabaseContext(options, schema, namespace, name);\n const { orm } = dbContext;\n\n // Return handler wrapper function\n return (handler: DatabaseRouteHandler): RouteHandler => {\n return async (inputContext, outputContext) => {\n // Create UOW for this request\n const uow = orm.createUnitOfWork();\n\n // Execute handler within AsyncLocalStorage context\n return withUnitOfWork(uow, async () => {\n // Bind handler to serviceContext so it has access to getUnitOfWork via 'this'\n const boundHandler = handler.bind(serviceContext);\n return boundHandler(inputContext, outputContext);\n });\n };\n };\n }\n : undefined,\n usedServices: this.#usedServices as\n | {\n [K in keyof TUsedServices]: { name: string; required: boolean };\n }\n | undefined,\n // Pass providedServices as-is - let fragment-instantiation.ts handle resolution\n // The factory functions will be called by createFragment\n providedServices: providedServices as\n | {\n [K in keyof BoundServices<TProvidedServices>]: BoundServices<TProvidedServices>[K];\n }\n | ((\n config: TConfig,\n options: FragnoPublicConfig,\n deps: TDeps & BoundServices<TUsedServices>,\n ) => BoundServices<TProvidedServices>)\n | undefined,\n };\n }\n\n #createDatabaseContext(\n options: FragnoPublicConfig,\n schema: TSchema | undefined,\n namespace: string,\n name: string,\n ): DatabaseFragmentContext<TSchema> {\n // Safe cast: FragnoPublicConfig is extended with databaseAdapter by the user\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const databaseAdapter = (options as any).databaseAdapter as DatabaseAdapter<any> | undefined;\n\n if (!databaseAdapter) {\n throw new Error(`Fragment '${name}' requires a database adapter in options.databaseAdapter`);\n }\n if (!schema) {\n throw new Error(`Fragment '${name}' requires a schema. Use withDatabase() to provide one.`);\n }\n\n // Safe cast: we create a query engine for TSchema and know it will be AbstractQuery<TSchema>\n const orm = databaseAdapter.createQueryEngine(\n schema,\n namespace,\n ) as unknown as AbstractQuery<TSchema>;\n\n return { databaseAdapter, orm };\n }\n\n withDatabase<TNewSchema extends AnySchema>(\n schema: TNewSchema,\n namespace?: string,\n ): DatabaseFragmentBuilder<\n TNewSchema,\n TConfig,\n TDeps,\n TServices,\n TUsedServices,\n TProvidedServices\n > {\n return new DatabaseFragmentBuilder<\n TNewSchema,\n TConfig,\n TDeps,\n TServices,\n TUsedServices,\n TProvidedServices\n >({\n name: this.#name,\n schema,\n namespace: namespace ?? this.#name + \"-db\",\n dependencies: this.#dependencies as\n | ((\n context: {\n config: TConfig;\n fragnoConfig: FragnoPublicConfig;\n } & DatabaseFragmentContext<TNewSchema>,\n ) => TDeps)\n | undefined,\n services: this.#services as\n | ((\n context: {\n config: TConfig;\n fragnoConfig: FragnoPublicConfig;\n deps: TDeps & TUsedServices;\n defineService: <T extends Record<string, unknown>>(\n services: WithDatabaseThis<T>,\n ) => WithDatabaseThis<T>;\n } & DatabaseFragmentContext<TNewSchema>,\n ) => TServices)\n | undefined,\n usedServices: this.#usedServices,\n providedServices: this.#providedServices,\n });\n }\n\n withDependencies<TNewDeps>(\n fn: (\n context: {\n config: TConfig;\n fragnoConfig: FragnoPublicConfig;\n } & DatabaseFragmentContext<TSchema>,\n ) => TNewDeps,\n ): DatabaseFragmentBuilder<TSchema, TConfig, TNewDeps, {}, TUsedServices, TProvidedServices> {\n return new DatabaseFragmentBuilder<\n TSchema,\n TConfig,\n TNewDeps,\n {},\n TUsedServices,\n TProvidedServices\n >({\n name: this.#name,\n schema: this.#schema,\n namespace: this.#namespace,\n dependencies: fn,\n services: undefined,\n usedServices: this.#usedServices,\n providedServices: this.#providedServices,\n });\n }\n\n /**\n * Declare that this fragment uses a service.\n * @param serviceName - The name of the service to use\n * @param options - Optional configuration: { optional: boolean } (defaults to required)\n */\n usesService<TServiceName extends string, TService>(\n serviceName: TServiceName,\n options?: { optional?: false },\n ): DatabaseFragmentBuilder<\n TSchema,\n TConfig,\n TDeps,\n TServices,\n TUsedServices & { [K in TServiceName]: TService },\n TProvidedServices\n >;\n usesService<TServiceName extends string, TService>(\n serviceName: TServiceName,\n options: { optional: true },\n ): DatabaseFragmentBuilder<\n TSchema,\n TConfig,\n TDeps,\n TServices,\n TUsedServices & { [K in TServiceName]: TService | undefined },\n TProvidedServices\n >;\n usesService<TServiceName extends string, TService>(\n serviceName: TServiceName,\n options?: { optional?: boolean },\n ): DatabaseFragmentBuilder<\n TSchema,\n TConfig,\n TDeps,\n TServices,\n TUsedServices & { [K in TServiceName]: TService | TService | undefined },\n TProvidedServices\n > {\n const isOptional = options?.optional ?? false;\n return new DatabaseFragmentBuilder<\n TSchema,\n TConfig,\n TDeps,\n TServices,\n TUsedServices & { [K in TServiceName]: TService | (TService | undefined) },\n TProvidedServices\n >({\n name: this.#name,\n schema: this.#schema,\n namespace: this.#namespace,\n dependencies: this.#dependencies as unknown as\n | ((\n context: {\n config: TConfig;\n fragnoConfig: FragnoPublicConfig;\n } & DatabaseFragmentContext<TSchema>,\n ) => TDeps)\n | undefined,\n services: this.#services as unknown as\n | ((\n context: {\n config: TConfig;\n fragnoConfig: FragnoPublicConfig;\n deps: TDeps &\n (TUsedServices & { [K in TServiceName]: TService | (TService | undefined) });\n } & DatabaseFragmentContext<TSchema>,\n ) => TServices)\n | undefined,\n usedServices: {\n ...this.#usedServices,\n [serviceName]: { name: serviceName, required: !isOptional },\n },\n providedServices: this.#providedServices,\n });\n }\n\n /**\n * Define services for this fragment (unnamed).\n * Functions in the service will have access to DatabaseRequestThisContext via `this` if using `defineService`.\n *\n * @example\n * With `this` context:\n * ```ts\n * .providesService(({ defineService }) => defineService({\n * createUser: function(name: string) {\n * const uow = this.getUnitOfWork(mySchema);\n * return uow.create('user', { name });\n * }\n * }))\n * ```\n *\n * Without `this` context:\n * ```ts\n * .providesService(({ db }) => ({\n * createUser: async (name: string) => {\n * return db.create('user', { name });\n * }\n * }))\n * ```\n */\n providesService<TNewServices>(\n fn: (context: {\n config: TConfig;\n fragnoConfig: FragnoPublicConfig;\n deps: TDeps & TUsedServices;\n db: AbstractQuery<TSchema>;\n defineService: <T extends Record<string, unknown>>(\n services: WithDatabaseThis<T>,\n ) => WithDatabaseThis<T>;\n }) => TNewServices,\n ): DatabaseFragmentBuilder<\n TSchema,\n TConfig,\n TDeps,\n TNewServices,\n TUsedServices,\n TProvidedServices\n >;\n\n /**\n * Provide a named service that other fragments can use.\n * Functions in the service will have access to DatabaseRequestThisContext via `this` if using `defineService`.\n * You can also pass a service object directly instead of a callback.\n *\n * @example\n * With callback and `this` context:\n * ```ts\n * .providesService(\"myService\", ({ defineService }) => defineService({\n * createUser: function(name: string) {\n * const uow = this.getUnitOfWork(mySchema);\n * return uow.create('user', { name });\n * }\n * }))\n * ```\n *\n * With callback, no `this` context:\n * ```ts\n * .providesService(\"myService\", ({ db }) => ({\n * createUser: async (name: string) => {\n * return db.create('user', { name });\n * }\n * }))\n * ```\n *\n * With direct object:\n * ```ts\n * .providesService(\"myService\", {\n * createUser: async (name: string) => { ... }\n * })\n * ```\n */\n providesService<TServiceName extends string, TService>(\n serviceName: TServiceName,\n fnOrService:\n | ((context: {\n config: TConfig;\n fragnoConfig: FragnoPublicConfig;\n deps: TDeps & TUsedServices;\n db: AbstractQuery<TSchema>;\n defineService: <T extends Record<string, unknown>>(\n services: WithDatabaseThis<T>,\n ) => WithDatabaseThis<T>;\n }) => TService)\n | TService,\n ): DatabaseFragmentBuilder<\n TSchema,\n TConfig,\n TDeps,\n TServices,\n TUsedServices,\n TProvidedServices & { [K in TServiceName]: BoundServices<TService> }\n >;\n\n providesService<TServiceName extends string, TService>(\n ...args:\n | [\n fn: (context: {\n config: TConfig;\n fragnoConfig: FragnoPublicConfig;\n deps: TDeps & TUsedServices;\n db: AbstractQuery<TSchema>;\n defineService: <T extends Record<string, unknown>>(\n services: WithDatabaseThis<T>,\n ) => WithDatabaseThis<T>;\n }) => TService,\n ]\n | [\n serviceName: TServiceName,\n fnOrService:\n | ((context: {\n config: TConfig;\n fragnoConfig: FragnoPublicConfig;\n deps: TDeps & TUsedServices;\n db: AbstractQuery<TSchema>;\n defineService: <T extends Record<string, unknown>>(\n services: WithDatabaseThis<T>,\n ) => WithDatabaseThis<T>;\n }) => TService)\n | TService,\n ]\n ):\n | DatabaseFragmentBuilder<TSchema, TConfig, TDeps, TService, TUsedServices, TProvidedServices>\n | DatabaseFragmentBuilder<\n TSchema,\n TConfig,\n TDeps,\n TServices,\n TUsedServices,\n TProvidedServices & { [K in TServiceName]: BoundServices<TService> }\n > {\n if (args.length === 1) {\n // Unnamed service - replaces withServices\n const [fn] = args;\n\n // Create a callback that takes a single context object (matching #services signature)\n // Note: We don't explicitly type the return to preserve the WithDatabaseThis wrapper\n const servicesCallback = (\n context: {\n config: TConfig;\n fragnoConfig: FragnoPublicConfig;\n deps: TDeps & TUsedServices;\n } & DatabaseFragmentContext<TSchema>,\n ) => {\n // defineService provides typing for service functions\n // It expects the input to already have proper 'this' types on functions\n const defineService = <T extends Record<string, unknown>>(\n services: WithDatabaseThis<T>,\n ): WithDatabaseThis<T> => services;\n\n const services = fn({\n config: context.config,\n fragnoConfig: context.fragnoConfig,\n deps: context.deps,\n db: context.orm,\n defineService,\n });\n\n // Return without casting to preserve the WithDatabaseThis wrapper\n return services;\n };\n\n return new DatabaseFragmentBuilder<\n TSchema,\n TConfig,\n TDeps,\n TService,\n TUsedServices,\n TProvidedServices\n >({\n name: this.#name,\n schema: this.#schema,\n namespace: this.#namespace,\n dependencies: this.#dependencies,\n // Safe cast: servicesCallback returns WithDatabaseThis<TService> but we store it as TService.\n // At runtime, bindServicesToContext will handle the 'this' binding properly.\n services: servicesCallback as (\n context: {\n config: TConfig;\n fragnoConfig: FragnoPublicConfig;\n deps: TDeps & TUsedServices;\n defineService: <T extends Record<string, unknown>>(\n services: WithDatabaseThis<T>,\n ) => WithDatabaseThis<T>;\n } & DatabaseFragmentContext<TSchema>,\n ) => TService,\n usedServices: this.#usedServices,\n providedServices: this.#providedServices,\n });\n } else {\n // Named service\n const [serviceName, fnOrService] = args;\n\n // Create a callback that provides the full context\n const createService = (\n config: TConfig,\n options: FragnoPublicConfig,\n deps: TDeps & TUsedServices,\n ): BoundServices<TService> => {\n const dbContext = this.#createDatabaseContext(\n options,\n this.#schema,\n this.#namespace ?? \"\",\n this.#name,\n );\n\n // Check if fnOrService is a function or a direct object\n let implementation: TService;\n if (typeof fnOrService === \"function\") {\n // It's a callback - call it with context\n // defineService provides typing for service functions\n // It expects the input to already have proper 'this' types on functions\n const defineService = <T extends Record<string, unknown>>(\n services: WithDatabaseThis<T>,\n ): WithDatabaseThis<T> => services;\n\n // Safe cast: we checked that fnOrService is a function\n implementation = (\n fnOrService as (context: {\n config: TConfig;\n fragnoConfig: FragnoPublicConfig;\n deps: TDeps & TUsedServices;\n db: AbstractQuery<TSchema>;\n defineService: <T extends Record<string, unknown>>(\n services: WithDatabaseThis<T>,\n ) => WithDatabaseThis<T>;\n }) => TService\n )({\n config,\n fragnoConfig: options,\n deps,\n db: dbContext.orm,\n defineService,\n });\n } else {\n // It's a direct object\n implementation = fnOrService;\n }\n\n // Bind the service implementation so methods have access to serviceContext\n return bindServicesToContext(\n implementation as Record<string, unknown>,\n ) as BoundServices<TService>;\n };\n\n // We need to evaluate this immediately to store in providedServices\n // For now, we'll create a placeholder that will be evaluated when fragment is instantiated\n // Actually, we need to defer this until fragment instantiation\n // Let's store a function that creates the service\n return new DatabaseFragmentBuilder<\n TSchema,\n TConfig,\n TDeps,\n TServices,\n TUsedServices,\n TProvidedServices & { [K in TServiceName]: BoundServices<TService> }\n >({\n name: this.#name,\n schema: this.#schema,\n namespace: this.#namespace,\n dependencies: this.#dependencies,\n services: this.#services,\n usedServices: this.#usedServices,\n providedServices: {\n ...this.#providedServices,\n [serviceName]: createService,\n } as Record<string, unknown>,\n });\n }\n }\n}\n\nexport function defineFragmentWithDatabase<TConfig = {}>(\n name: string,\n): DatabaseFragmentBuilder<never, TConfig, {}, {}, {}, {}> {\n return new DatabaseFragmentBuilder<never, TConfig, {}, {}, {}, {}>({\n name,\n });\n}\n"],"mappings":"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"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { MigrationOperation } from "./shared.js";
|
|
2
|
-
|
|
3
|
-
//#region src/migration-engine/create.d.ts
|
|
4
|
-
|
|
5
|
-
interface MigrateOptions {
|
|
6
|
-
/**
|
|
7
|
-
* Update internal settings, it's true by default.
|
|
8
|
-
* We don't recommend to disable it other than testing purposes.
|
|
9
|
-
*/
|
|
10
|
-
updateSettings?: boolean;
|
|
11
|
-
}
|
|
12
|
-
interface PreparedMigration {
|
|
13
|
-
operations: MigrationOperation[];
|
|
14
|
-
getSQL?: () => string;
|
|
15
|
-
execute: () => Promise<void>;
|
|
16
|
-
}
|
|
17
|
-
interface Migrator {
|
|
18
|
-
/**
|
|
19
|
-
* Get current version (returns 0 if not initialized)
|
|
20
|
-
*/
|
|
21
|
-
getVersion: () => Promise<number>;
|
|
22
|
-
/**
|
|
23
|
-
* Migrate to the latest schema version
|
|
24
|
-
*/
|
|
25
|
-
prepareMigration: (options?: MigrateOptions) => Promise<PreparedMigration>;
|
|
26
|
-
/**
|
|
27
|
-
* Migrate to a specific version (only forward migrations allowed)
|
|
28
|
-
* @param toVersion - Target version to migrate to
|
|
29
|
-
* @param options - Migration options including optional fromVersion
|
|
30
|
-
*/
|
|
31
|
-
prepareMigrationTo: (toVersion: number, options?: MigrateOptions & {
|
|
32
|
-
fromVersion?: number;
|
|
33
|
-
}) => Promise<PreparedMigration>;
|
|
34
|
-
}
|
|
35
|
-
//#endregion
|
|
36
|
-
export { Migrator, PreparedMigration };
|
|
37
|
-
//# sourceMappingURL=create.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","names":[],"sources":["../../src/migration-engine/create.ts"],"sourcesContent":[],"mappings":";;;;AAmC0D,UAvBzC,cAAA,CAuByC;EAAR;;;;EAUpC,cAAA,CAAA,EAAA,OAAA;;UAzBG,iBAAA;cACH;;iBAEG;;UAGA,QAAA;;;;oBAIG;;;;+BAKW,mBAAmB,QAAQ;;;;;;oDAS5C;;QACP,QAAQ"}
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { generateMigrationFromSchema } from "./auto-from-schema.js";
|
|
2
|
-
|
|
3
|
-
//#region src/migration-engine/create.ts
|
|
4
|
-
function createMigrator({ settings, generateMigrationFromSchema: generateMigrationFromSchema$1 = generateMigrationFromSchema, schema: targetSchema, executor, sql: sqlConfig, transformers = [] }) {
|
|
5
|
-
return {
|
|
6
|
-
getVersion() {
|
|
7
|
-
return settings.getVersion();
|
|
8
|
-
},
|
|
9
|
-
async prepareMigration(options = {}) {
|
|
10
|
-
return this.prepareMigrationTo(targetSchema.version, options);
|
|
11
|
-
},
|
|
12
|
-
async prepareMigrationTo(toVersion, options = {}) {
|
|
13
|
-
const { updateSettings: updateVersion = true, fromVersion: providedFromVersion } = options;
|
|
14
|
-
const fromVersion = providedFromVersion ?? await settings.getVersion();
|
|
15
|
-
if (toVersion < 0) throw new Error(`Cannot migrate to negative version: ${toVersion}`);
|
|
16
|
-
if (fromVersion < 0) throw new Error(`Cannot migrate from negative version: ${fromVersion}`);
|
|
17
|
-
if (toVersion < fromVersion) throw new Error(`Cannot migrate backwards: current version is ${fromVersion}, target is ${toVersion}. Only forward migrations are supported.`);
|
|
18
|
-
if (toVersion > targetSchema.version) throw new Error(`Cannot migrate to version ${toVersion}: schema only has version ${targetSchema.version}`);
|
|
19
|
-
if (fromVersion > targetSchema.version) throw new Error(`Cannot migrate from version ${fromVersion}: schema only has version ${targetSchema.version}`);
|
|
20
|
-
if (toVersion === fromVersion) return {
|
|
21
|
-
operations: [],
|
|
22
|
-
getSQL: sqlConfig ? () => sqlConfig.toSql([]) : void 0,
|
|
23
|
-
execute: async () => {}
|
|
24
|
-
};
|
|
25
|
-
const context = { async auto() {
|
|
26
|
-
let generated = generateMigrationFromSchema$1(targetSchema, fromVersion, toVersion);
|
|
27
|
-
for (const transformer of transformers) {
|
|
28
|
-
if (!transformer.afterAuto) continue;
|
|
29
|
-
generated = transformer.afterAuto(generated, {
|
|
30
|
-
fromVersion,
|
|
31
|
-
toVersion,
|
|
32
|
-
schema: targetSchema,
|
|
33
|
-
options
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
return generated;
|
|
37
|
-
} };
|
|
38
|
-
let operations = updateVersion ? [...await context.auto(), ...await settings.updateSettingsInMigration(fromVersion, toVersion)] : await context.auto();
|
|
39
|
-
for (const transformer of transformers) {
|
|
40
|
-
if (!transformer.afterAll) continue;
|
|
41
|
-
operations = transformer.afterAll(operations, {
|
|
42
|
-
fromVersion,
|
|
43
|
-
toVersion,
|
|
44
|
-
schema: targetSchema
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
return {
|
|
48
|
-
operations,
|
|
49
|
-
getSQL: sqlConfig ? () => sqlConfig.toSql(operations) : void 0,
|
|
50
|
-
execute: () => executor(operations)
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
//#endregion
|
|
57
|
-
export { createMigrator };
|
|
58
|
-
//# sourceMappingURL=create.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","names":["defaultGenerateMigrationFromSchema","context: MigrationContext","generateMigrationFromSchema"],"sources":["../../src/migration-engine/create.ts"],"sourcesContent":["import { type MigrationOperation } from \"./shared\";\nimport type { AnySchema } from \"../schema/create\";\nimport { generateMigrationFromSchema as defaultGenerateMigrationFromSchema } from \"./auto-from-schema\";\n\ntype Awaitable<T> = T | Promise<T>;\n\ninterface MigrationContext {\n auto: () => Promise<MigrationOperation[]>;\n}\n\nexport type CustomMigrationFn = (context: MigrationContext) => Awaitable<MigrationOperation[]>;\n\nexport interface MigrateOptions {\n /**\n * Update internal settings, it's true by default.\n * We don't recommend to disable it other than testing purposes.\n */\n updateSettings?: boolean;\n}\n\nexport interface PreparedMigration {\n operations: MigrationOperation[];\n getSQL?: () => string;\n execute: () => Promise<void>;\n}\n\nexport interface Migrator {\n /**\n * Get current version (returns 0 if not initialized)\n */\n getVersion: () => Promise<number>;\n\n /**\n * Migrate to the latest schema version\n */\n prepareMigration: (options?: MigrateOptions) => Promise<PreparedMigration>;\n\n /**\n * Migrate to a specific version (only forward migrations allowed)\n * @param toVersion - Target version to migrate to\n * @param options - Migration options including optional fromVersion\n */\n prepareMigrationTo: (\n toVersion: number,\n options?: MigrateOptions & { fromVersion?: number },\n ) => Promise<PreparedMigration>;\n}\n\nexport interface MigrationEngineOptions {\n /**\n * The target schema to migrate to\n */\n schema: AnySchema;\n\n executor: (operations: MigrationOperation[]) => Promise<void>;\n\n generateMigrationFromSchema?: typeof defaultGenerateMigrationFromSchema;\n\n settings: {\n /**\n * Get current version from database (0 if not initialized)\n */\n getVersion: () => Promise<number>;\n\n updateSettingsInMigration: (\n fromVersion: number,\n toVersion: number,\n ) => Awaitable<MigrationOperation[]>;\n };\n\n sql?: {\n toSql: (operations: MigrationOperation[]) => string;\n };\n\n transformers?: MigrationTransformer[];\n}\n\nexport interface MigrationTransformer {\n /**\n * Run after auto-generating migration operations\n */\n afterAuto?: (\n operations: MigrationOperation[],\n context: {\n options: MigrateOptions;\n fromVersion: number;\n toVersion: number;\n schema: AnySchema;\n },\n ) => MigrationOperation[];\n\n /**\n * Run on all migration operations\n */\n afterAll?: (\n operations: MigrationOperation[],\n context: {\n fromVersion: number;\n toVersion: number;\n schema: AnySchema;\n },\n ) => MigrationOperation[];\n}\n\nexport function createMigrator({\n settings,\n generateMigrationFromSchema = defaultGenerateMigrationFromSchema,\n schema: targetSchema,\n executor,\n sql: sqlConfig,\n transformers = [],\n}: MigrationEngineOptions): Migrator {\n const instance: Migrator = {\n getVersion() {\n return settings.getVersion();\n },\n async prepareMigration(options = {}) {\n return this.prepareMigrationTo(targetSchema.version, options);\n },\n async prepareMigrationTo(toVersion, options = {}) {\n const { updateSettings: updateVersion = true, fromVersion: providedFromVersion } = options;\n\n // Use provided fromVersion if available, otherwise query the database\n const fromVersion = providedFromVersion ?? (await settings.getVersion());\n\n if (toVersion < 0) {\n throw new Error(`Cannot migrate to negative version: ${toVersion}`);\n }\n\n if (fromVersion < 0) {\n throw new Error(`Cannot migrate from negative version: ${fromVersion}`);\n }\n\n if (toVersion < fromVersion) {\n throw new Error(\n `Cannot migrate backwards: current version is ${fromVersion}, target is ${toVersion}. Only forward migrations are supported.`,\n );\n }\n\n if (toVersion > targetSchema.version) {\n throw new Error(\n `Cannot migrate to version ${toVersion}: schema only has version ${targetSchema.version}`,\n );\n }\n\n if (fromVersion > targetSchema.version) {\n throw new Error(\n `Cannot migrate from version ${fromVersion}: schema only has version ${targetSchema.version}`,\n );\n }\n\n if (toVersion === fromVersion) {\n // Already at target version, return empty migration\n return {\n operations: [],\n getSQL: sqlConfig ? () => sqlConfig.toSql([]) : undefined,\n execute: async () => {},\n };\n }\n\n const context: MigrationContext = {\n async auto() {\n let generated = generateMigrationFromSchema(targetSchema, fromVersion, toVersion);\n\n for (const transformer of transformers) {\n if (!transformer.afterAuto) {\n continue;\n }\n\n generated = transformer.afterAuto(generated, {\n fromVersion,\n toVersion,\n schema: targetSchema,\n options,\n });\n }\n\n return generated;\n },\n };\n\n let operations = updateVersion\n ? [\n ...(await context.auto()),\n ...(await settings.updateSettingsInMigration(fromVersion, toVersion)),\n ]\n : await context.auto();\n\n for (const transformer of transformers) {\n if (!transformer.afterAll) {\n continue;\n }\n operations = transformer.afterAll(operations, {\n fromVersion,\n toVersion,\n schema: targetSchema,\n });\n }\n\n return {\n operations,\n getSQL: sqlConfig ? () => sqlConfig.toSql(operations) : undefined,\n execute: () => executor(operations),\n };\n },\n };\n\n return instance;\n}\n"],"mappings":";;;AAwGA,SAAgB,eAAe,EAC7B,UACA,6DAA8BA,6BAC9B,QAAQ,cACR,UACA,KAAK,WACL,eAAe,EAAE,IACkB;AAgGnC,QA/F2B;EACzB,aAAa;AACX,UAAO,SAAS,YAAY;;EAE9B,MAAM,iBAAiB,UAAU,EAAE,EAAE;AACnC,UAAO,KAAK,mBAAmB,aAAa,SAAS,QAAQ;;EAE/D,MAAM,mBAAmB,WAAW,UAAU,EAAE,EAAE;GAChD,MAAM,EAAE,gBAAgB,gBAAgB,MAAM,aAAa,wBAAwB;GAGnF,MAAM,cAAc,uBAAwB,MAAM,SAAS,YAAY;AAEvE,OAAI,YAAY,EACd,OAAM,IAAI,MAAM,uCAAuC,YAAY;AAGrE,OAAI,cAAc,EAChB,OAAM,IAAI,MAAM,yCAAyC,cAAc;AAGzE,OAAI,YAAY,YACd,OAAM,IAAI,MACR,gDAAgD,YAAY,cAAc,UAAU,0CACrF;AAGH,OAAI,YAAY,aAAa,QAC3B,OAAM,IAAI,MACR,6BAA6B,UAAU,4BAA4B,aAAa,UACjF;AAGH,OAAI,cAAc,aAAa,QAC7B,OAAM,IAAI,MACR,+BAA+B,YAAY,4BAA4B,aAAa,UACrF;AAGH,OAAI,cAAc,YAEhB,QAAO;IACL,YAAY,EAAE;IACd,QAAQ,kBAAkB,UAAU,MAAM,EAAE,CAAC,GAAG;IAChD,SAAS,YAAY;IACtB;GAGH,MAAMC,UAA4B,EAChC,MAAM,OAAO;IACX,IAAI,YAAYC,8BAA4B,cAAc,aAAa,UAAU;AAEjF,SAAK,MAAM,eAAe,cAAc;AACtC,SAAI,CAAC,YAAY,UACf;AAGF,iBAAY,YAAY,UAAU,WAAW;MAC3C;MACA;MACA,QAAQ;MACR;MACD,CAAC;;AAGJ,WAAO;MAEV;GAED,IAAI,aAAa,gBACb,CACE,GAAI,MAAM,QAAQ,MAAM,EACxB,GAAI,MAAM,SAAS,0BAA0B,aAAa,UAAU,CACrE,GACD,MAAM,QAAQ,MAAM;AAExB,QAAK,MAAM,eAAe,cAAc;AACtC,QAAI,CAAC,YAAY,SACf;AAEF,iBAAa,YAAY,SAAS,YAAY;KAC5C;KACA;KACA,QAAQ;KACT,CAAC;;AAGJ,UAAO;IACL;IACA,QAAQ,kBAAkB,UAAU,MAAM,WAAW,GAAG;IACxD,eAAe,SAAS,WAAW;IACpC;;EAEJ"}
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
//#region src/migration-engine/shared.d.ts
|
|
2
|
-
interface ForeignKeyInfo {
|
|
3
|
-
name: string;
|
|
4
|
-
columns: string[];
|
|
5
|
-
referencedTable: string;
|
|
6
|
-
referencedColumns: string[];
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* Provider-specific metadata that can be attached to operations during preprocessing.
|
|
10
|
-
* This allows providers to add additional context without polluting the core operation types.
|
|
11
|
-
*/
|
|
12
|
-
interface MigrationOperationMetadata {
|
|
13
|
-
[key: string]: unknown;
|
|
14
|
-
}
|
|
15
|
-
interface ColumnInfo {
|
|
16
|
-
name: string;
|
|
17
|
-
type: "string" | "integer" | "bigint" | "decimal" | "bool" | "date" | "timestamp" | "json" | "binary" | `varchar(${number})`;
|
|
18
|
-
isNullable: boolean;
|
|
19
|
-
role: "external-id" | "internal-id" | "version" | "reference" | "regular";
|
|
20
|
-
default?: {
|
|
21
|
-
value: unknown;
|
|
22
|
-
} | {
|
|
23
|
-
dbSpecial: "now";
|
|
24
|
-
} | {
|
|
25
|
-
runtime: "cuid" | "now";
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
type MigrationOperation<TMeta extends MigrationOperationMetadata = MigrationOperationMetadata> = (TableOperation & {
|
|
29
|
-
metadata?: TMeta;
|
|
30
|
-
}) | ({
|
|
31
|
-
type: "add-foreign-key";
|
|
32
|
-
table: string;
|
|
33
|
-
value: ForeignKeyInfo;
|
|
34
|
-
} & {
|
|
35
|
-
metadata?: TMeta;
|
|
36
|
-
}) | ({
|
|
37
|
-
type: "drop-foreign-key";
|
|
38
|
-
table: string;
|
|
39
|
-
name: string;
|
|
40
|
-
} & {
|
|
41
|
-
metadata?: TMeta;
|
|
42
|
-
}) | ({
|
|
43
|
-
type: "drop-index";
|
|
44
|
-
table: string;
|
|
45
|
-
name: string;
|
|
46
|
-
} & {
|
|
47
|
-
metadata?: TMeta;
|
|
48
|
-
}) | ({
|
|
49
|
-
type: "add-index";
|
|
50
|
-
table: string;
|
|
51
|
-
columns: string[];
|
|
52
|
-
name: string;
|
|
53
|
-
unique: boolean;
|
|
54
|
-
} & {
|
|
55
|
-
metadata?: TMeta;
|
|
56
|
-
}) | (CustomOperation & {
|
|
57
|
-
metadata?: TMeta;
|
|
58
|
-
});
|
|
59
|
-
type CustomOperation = {
|
|
60
|
-
type: "custom";
|
|
61
|
-
} & Record<string, unknown>;
|
|
62
|
-
type TableOperation = {
|
|
63
|
-
type: "create-table";
|
|
64
|
-
name: string;
|
|
65
|
-
columns: ColumnInfo[];
|
|
66
|
-
} | {
|
|
67
|
-
type: "drop-table";
|
|
68
|
-
name: string;
|
|
69
|
-
} | {
|
|
70
|
-
type: "alter-table";
|
|
71
|
-
name: string;
|
|
72
|
-
value: ColumnOperation[];
|
|
73
|
-
} | {
|
|
74
|
-
type: "rename-table";
|
|
75
|
-
from: string;
|
|
76
|
-
to: string;
|
|
77
|
-
};
|
|
78
|
-
type ColumnOperation = {
|
|
79
|
-
type: "rename-column";
|
|
80
|
-
from: string;
|
|
81
|
-
to: string;
|
|
82
|
-
} | {
|
|
83
|
-
type: "drop-column";
|
|
84
|
-
name: string;
|
|
85
|
-
} | {
|
|
86
|
-
/**
|
|
87
|
-
* Note: unique constraints are not created, please use dedicated operations like `add-index` instead
|
|
88
|
-
*/
|
|
89
|
-
type: "create-column";
|
|
90
|
-
value: ColumnInfo;
|
|
91
|
-
} | {
|
|
92
|
-
/**
|
|
93
|
-
* warning: Not supported by SQLite
|
|
94
|
-
*/
|
|
95
|
-
type: "update-column";
|
|
96
|
-
name: string;
|
|
97
|
-
/**
|
|
98
|
-
* For databases like MySQL, it requires the full definition for any modify column statement.
|
|
99
|
-
* Hence, you need to specify the full information of your column here.
|
|
100
|
-
*
|
|
101
|
-
* Then, opt-in for in-detail modification for other databases that supports changing data type/nullable/default separately, such as PostgreSQL.
|
|
102
|
-
*
|
|
103
|
-
* Note: unique constraints are not updated, please use dedicated operations like `add-index` instead
|
|
104
|
-
*/
|
|
105
|
-
value: ColumnInfo;
|
|
106
|
-
updateNullable: boolean;
|
|
107
|
-
updateDefault: boolean;
|
|
108
|
-
updateDataType: boolean;
|
|
109
|
-
};
|
|
110
|
-
//#endregion
|
|
111
|
-
export { MigrationOperation };
|
|
112
|
-
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","names":[],"sources":["../../src/migration-engine/shared.ts"],"sourcesContent":[],"mappings":";UAAiB,cAAA;EAAA,IAAA,EAAA,MAAA;EAWA,OAAA,EAAA,MAAA,EAAA;EAYA,eAAU,EAAA,MAAA;EAkBf,iBAAA,EAAA,MAAkB,EAAA;;;;;;AAST,UAvCJ,0BAAA,CAuCI;EAMA,CAAA,GAAA,EAAA,MAAA,CAAA,EAAA,OAAA;;UAjCJ,UAAA;;;;;;;;;;;;;KAkBL,iCACI,6BAA6B,+BAExC;aAA8B;;;;SAKtB;;aACQ;;;;;;aAMA;;;;;;aAKA;;;;;;;;aAOA;MAChB;aAA+B;;KAExB,eAAA;;IAER;KAEQ,cAAA;;;WAIG;;;;;;;SASF;;;;;;KAQD,eAAA;;;;;;;;;;;;SAeC;;;;;;;;;;;;;;;SAgBA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","names":[],"sources":["../../src/query/query.ts"],"sourcesContent":[],"mappings":"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"}
|