uql-orm 0.9.5 → 0.10.2
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/CHANGELOG.md +43 -0
- package/README.md +3 -2
- package/dist/browser/http/bus.d.ts +4 -0
- package/dist/browser/http/bus.d.ts.map +1 -0
- package/dist/browser/http/bus.js +14 -0
- package/dist/browser/http/bus.js.map +1 -0
- package/dist/browser/http/http.d.ts +22 -0
- package/dist/browser/http/http.d.ts.map +1 -0
- package/dist/browser/http/http.js +70 -0
- package/dist/browser/http/http.js.map +1 -0
- package/dist/browser/http/index.d.ts +3 -0
- package/dist/browser/http/index.d.ts.map +1 -0
- package/dist/browser/http/index.js +3 -0
- package/dist/browser/http/index.js.map +1 -0
- package/dist/browser/index.d.ts +5 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +5 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/options.d.ts +5 -0
- package/dist/browser/options.d.ts.map +1 -0
- package/dist/browser/options.js +14 -0
- package/dist/browser/options.js.map +1 -0
- package/dist/browser/querier/httpQuerier.d.ts +38 -0
- package/dist/browser/querier/httpQuerier.d.ts.map +1 -0
- package/dist/browser/querier/httpQuerier.js +83 -0
- package/dist/browser/querier/httpQuerier.js.map +1 -0
- package/dist/browser/querier/index.d.ts +2 -0
- package/dist/browser/querier/index.d.ts.map +1 -0
- package/dist/browser/querier/index.js +2 -0
- package/dist/browser/querier/index.js.map +1 -0
- package/dist/browser/type/clientQuerier.d.ts +28 -0
- package/dist/browser/type/clientQuerier.d.ts.map +1 -0
- package/dist/browser/type/clientQuerier.js +2 -0
- package/dist/browser/type/clientQuerier.js.map +1 -0
- package/dist/browser/type/clientQuerierPool.d.ts +5 -0
- package/dist/browser/type/clientQuerierPool.d.ts.map +1 -0
- package/dist/browser/type/clientQuerierPool.js +2 -0
- package/dist/browser/type/clientQuerierPool.js.map +1 -0
- package/dist/browser/type/index.d.ts +4 -0
- package/dist/browser/type/index.d.ts.map +1 -0
- package/dist/browser/type/index.js +4 -0
- package/dist/browser/type/index.js.map +1 -0
- package/dist/browser/type/request.d.ts +28 -0
- package/dist/browser/type/request.d.ts.map +1 -0
- package/dist/browser/type/request.js +2 -0
- package/dist/browser/type/request.js.map +1 -0
- package/dist/browser/uql-browser.min.js +2 -7029
- package/dist/browser/uql-browser.min.js.map +17 -1
- package/dist/bunSql/bunSql.util.d.ts +30 -0
- package/dist/bunSql/bunSql.util.d.ts.map +1 -0
- package/dist/bunSql/bunSql.util.js +101 -0
- package/dist/bunSql/bunSql.util.js.map +1 -0
- package/dist/bunSql/bunSqlPostgresDialect.d.ts +12 -0
- package/dist/bunSql/bunSqlPostgresDialect.d.ts.map +1 -0
- package/dist/bunSql/bunSqlPostgresDialect.js +21 -0
- package/dist/bunSql/bunSqlPostgresDialect.js.map +1 -0
- package/dist/bunSql/bunSqlQuerier.d.ts +14 -0
- package/dist/bunSql/bunSqlQuerier.d.ts.map +1 -0
- package/dist/bunSql/bunSqlQuerier.js +37 -0
- package/dist/bunSql/bunSqlQuerier.js.map +1 -0
- package/dist/bunSql/bunSqlQuerierPool.d.ts +19 -0
- package/dist/bunSql/bunSqlQuerierPool.d.ts.map +1 -0
- package/dist/bunSql/bunSqlQuerierPool.js +58 -0
- package/dist/bunSql/bunSqlQuerierPool.js.map +1 -0
- package/dist/bunSql/bunSqliteDialect.d.ts +7 -0
- package/dist/bunSql/bunSqliteDialect.d.ts.map +1 -0
- package/dist/bunSql/bunSqliteDialect.js +7 -0
- package/dist/bunSql/bunSqliteDialect.js.map +1 -0
- package/dist/bunSql/index.d.ts +5 -0
- package/dist/bunSql/index.d.ts.map +1 -0
- package/dist/bunSql/index.js +5 -0
- package/dist/bunSql/index.js.map +1 -0
- package/dist/cockroachdb/cockroachDialect.d.ts +15 -0
- package/dist/cockroachdb/cockroachDialect.d.ts.map +1 -0
- package/dist/cockroachdb/cockroachDialect.js +14 -0
- package/dist/cockroachdb/cockroachDialect.js.map +1 -0
- package/dist/cockroachdb/crdbQuerier.d.ts +9 -0
- package/dist/cockroachdb/crdbQuerier.d.ts.map +1 -0
- package/dist/cockroachdb/crdbQuerier.js +7 -0
- package/dist/cockroachdb/crdbQuerier.js.map +1 -0
- package/dist/cockroachdb/crdbQuerierPool.d.ts +14 -0
- package/dist/cockroachdb/crdbQuerierPool.d.ts.map +1 -0
- package/dist/cockroachdb/crdbQuerierPool.js +16 -0
- package/dist/cockroachdb/crdbQuerierPool.js.map +1 -0
- package/dist/cockroachdb/index.d.ts +4 -0
- package/dist/cockroachdb/index.d.ts.map +1 -0
- package/dist/cockroachdb/index.js +4 -0
- package/dist/cockroachdb/index.js.map +1 -0
- package/dist/d1/d1Querier.d.ts +46 -0
- package/dist/d1/d1Querier.d.ts.map +1 -0
- package/dist/d1/d1Querier.js +30 -0
- package/dist/d1/d1Querier.js.map +1 -0
- package/dist/d1/d1QuerierPool.d.ts +11 -0
- package/dist/d1/d1QuerierPool.d.ts.map +1 -0
- package/dist/d1/d1QuerierPool.js +17 -0
- package/dist/d1/d1QuerierPool.js.map +1 -0
- package/dist/d1/d1SqliteDialect.d.ts +10 -0
- package/dist/d1/d1SqliteDialect.d.ts.map +1 -0
- package/dist/d1/d1SqliteDialect.js +10 -0
- package/dist/d1/d1SqliteDialect.js.map +1 -0
- package/dist/d1/index.d.ts +4 -0
- package/dist/d1/index.d.ts.map +1 -0
- package/dist/d1/index.js +4 -0
- package/dist/d1/index.js.map +1 -0
- package/dist/dialect/abstractDialect.d.ts +32 -0
- package/dist/dialect/abstractDialect.d.ts.map +1 -0
- package/dist/dialect/abstractDialect.js +39 -0
- package/dist/dialect/abstractDialect.js.map +1 -0
- package/dist/dialect/abstractSqlDialect.d.ts +233 -0
- package/dist/dialect/abstractSqlDialect.d.ts.map +1 -0
- package/dist/dialect/abstractSqlDialect.js +1332 -0
- package/dist/dialect/abstractSqlDialect.js.map +1 -0
- package/dist/dialect/index.d.ts +9 -0
- package/dist/dialect/index.d.ts.map +1 -0
- package/dist/dialect/index.js +9 -0
- package/dist/dialect/index.js.map +1 -0
- package/dist/dialect/jsonArrayElemMatchUtils.d.ts +10 -0
- package/dist/dialect/jsonArrayElemMatchUtils.d.ts.map +1 -0
- package/dist/dialect/jsonArrayElemMatchUtils.js +24 -0
- package/dist/dialect/jsonArrayElemMatchUtils.js.map +1 -0
- package/dist/dialect/mysqlLikeSqlDialect.d.ts +36 -0
- package/dist/dialect/mysqlLikeSqlDialect.d.ts.map +1 -0
- package/dist/dialect/mysqlLikeSqlDialect.js +84 -0
- package/dist/dialect/mysqlLikeSqlDialect.js.map +1 -0
- package/dist/dialect/queryContext.d.ts +49 -0
- package/dist/dialect/queryContext.d.ts.map +1 -0
- package/dist/dialect/queryContext.js +65 -0
- package/dist/dialect/queryContext.js.map +1 -0
- package/dist/entity/decorator/entity.d.ts +3 -0
- package/dist/entity/decorator/entity.d.ts.map +1 -0
- package/dist/entity/decorator/entity.js +7 -0
- package/dist/entity/decorator/entity.js.map +1 -0
- package/dist/entity/decorator/field.d.ts +3 -0
- package/dist/entity/decorator/field.d.ts.map +1 -0
- package/dist/entity/decorator/field.js +8 -0
- package/dist/entity/decorator/field.js.map +1 -0
- package/dist/entity/decorator/hook.d.ts +8 -0
- package/dist/entity/decorator/hook.d.ts.map +1 -0
- package/dist/entity/decorator/hook.js +15 -0
- package/dist/entity/decorator/hook.js.map +1 -0
- package/dist/entity/decorator/id.d.ts +3 -0
- package/dist/entity/decorator/id.d.ts.map +1 -0
- package/dist/entity/decorator/id.js +8 -0
- package/dist/entity/decorator/id.js.map +1 -0
- package/dist/entity/decorator/index-decorator.d.ts +37 -0
- package/dist/entity/decorator/index-decorator.d.ts.map +1 -0
- package/dist/entity/decorator/index-decorator.js +27 -0
- package/dist/entity/decorator/index-decorator.js.map +1 -0
- package/dist/entity/decorator/index.d.ts +8 -0
- package/dist/entity/decorator/index.d.ts.map +1 -0
- package/dist/entity/decorator/index.js +8 -0
- package/dist/entity/decorator/index.js.map +1 -0
- package/dist/entity/decorator/relation.d.ts +9 -0
- package/dist/entity/decorator/relation.d.ts.map +1 -0
- package/dist/entity/decorator/relation.js +20 -0
- package/dist/entity/decorator/relation.js.map +1 -0
- package/dist/entity/index.d.ts +2 -0
- package/dist/entity/index.d.ts.map +1 -0
- package/dist/entity/index.js +2 -0
- package/dist/entity/index.js.map +1 -0
- package/dist/entity/metadata/definition.d.ts +16 -0
- package/dist/entity/metadata/definition.d.ts.map +1 -0
- package/dist/entity/metadata/definition.js +311 -0
- package/dist/entity/metadata/definition.js.map +1 -0
- package/dist/entity/test-helpers.d.ts +4 -0
- package/dist/entity/test-helpers.d.ts.map +1 -0
- package/dist/entity/test-helpers.js +15 -0
- package/dist/entity/test-helpers.js.map +1 -0
- package/dist/express/index.d.ts +2 -0
- package/dist/express/index.d.ts.map +1 -0
- package/dist/express/index.js +2 -0
- package/dist/express/index.js.map +1 -0
- package/dist/express/querierMiddleware.d.ts +12 -0
- package/dist/express/querierMiddleware.d.ts.map +1 -0
- package/dist/express/querierMiddleware.js +40 -0
- package/dist/express/querierMiddleware.js.map +1 -0
- package/dist/http/contract.d.ts +99 -0
- package/dist/http/contract.d.ts.map +1 -0
- package/dist/http/contract.js +72 -0
- package/dist/http/contract.js.map +1 -0
- package/dist/http/fetchHandler.d.ts +14 -0
- package/dist/http/fetchHandler.d.ts.map +1 -0
- package/dist/http/fetchHandler.js +63 -0
- package/dist/http/fetchHandler.js.map +1 -0
- package/dist/http/handler.d.ts +77 -0
- package/dist/http/handler.d.ts.map +1 -0
- package/dist/http/handler.js +172 -0
- package/dist/http/handler.js.map +1 -0
- package/dist/http/index.d.ts +5 -0
- package/dist/http/index.d.ts.map +1 -0
- package/dist/http/index.js +5 -0
- package/dist/http/index.js.map +1 -0
- package/dist/http/query.d.ts +12 -0
- package/dist/http/query.d.ts.map +1 -0
- package/dist/http/query.js +49 -0
- package/dist/http/query.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/libsql/index.d.ts +4 -0
- package/dist/libsql/index.d.ts.map +1 -0
- package/dist/libsql/index.js +4 -0
- package/dist/libsql/index.js.map +1 -0
- package/dist/libsql/libsqlDialect.d.ts +10 -0
- package/dist/libsql/libsqlDialect.d.ts.map +1 -0
- package/dist/libsql/libsqlDialect.js +10 -0
- package/dist/libsql/libsqlDialect.js.map +1 -0
- package/dist/libsql/libsqlQuerier.d.ts +24 -0
- package/dist/libsql/libsqlQuerier.d.ts.map +1 -0
- package/dist/libsql/libsqlQuerier.js +76 -0
- package/dist/libsql/libsqlQuerier.js.map +1 -0
- package/dist/libsql/libsqlQuerierPool.d.ts +20 -0
- package/dist/libsql/libsqlQuerierPool.d.ts.map +1 -0
- package/dist/libsql/libsqlQuerierPool.js +40 -0
- package/dist/libsql/libsqlQuerierPool.js.map +1 -0
- package/dist/maria/index.d.ts +4 -0
- package/dist/maria/index.d.ts.map +1 -0
- package/dist/maria/index.js +4 -0
- package/dist/maria/index.js.map +1 -0
- package/dist/maria/mariaDialect.d.ts +16 -0
- package/dist/maria/mariaDialect.d.ts.map +1 -0
- package/dist/maria/mariaDialect.js +56 -0
- package/dist/maria/mariaDialect.js.map +1 -0
- package/dist/maria/mariadbQuerier.d.ts +12 -0
- package/dist/maria/mariadbQuerier.d.ts.map +1 -0
- package/dist/maria/mariadbQuerier.js +31 -0
- package/dist/maria/mariadbQuerier.js.map +1 -0
- package/dist/maria/mariadbQuerierPool.d.ts +14 -0
- package/dist/maria/mariadbQuerierPool.d.ts.map +1 -0
- package/dist/maria/mariadbQuerierPool.js +26 -0
- package/dist/maria/mariadbQuerierPool.js.map +1 -0
- package/dist/migrate/acquireQuerierForMigrations.d.ts +9 -0
- package/dist/migrate/acquireQuerierForMigrations.d.ts.map +1 -0
- package/dist/migrate/acquireQuerierForMigrations.js +10 -0
- package/dist/migrate/acquireQuerierForMigrations.js.map +1 -0
- package/dist/migrate/assertCliConfig.d.ts +6 -0
- package/dist/migrate/assertCliConfig.d.ts.map +1 -0
- package/dist/migrate/assertCliConfig.js +31 -0
- package/dist/migrate/assertCliConfig.js.map +1 -0
- package/dist/migrate/bin.d.ts +3 -0
- package/dist/migrate/bin.d.ts.map +1 -0
- package/dist/migrate/bin.js +7 -0
- package/dist/migrate/bin.js.map +1 -0
- package/dist/migrate/builder/columnBuilder.d.ts +79 -0
- package/dist/migrate/builder/columnBuilder.d.ts.map +1 -0
- package/dist/migrate/builder/columnBuilder.js +159 -0
- package/dist/migrate/builder/columnBuilder.js.map +1 -0
- package/dist/migrate/builder/expressions.d.ts +87 -0
- package/dist/migrate/builder/expressions.d.ts.map +1 -0
- package/dist/migrate/builder/expressions.js +150 -0
- package/dist/migrate/builder/expressions.js.map +1 -0
- package/dist/migrate/builder/index.d.ts +6 -0
- package/dist/migrate/builder/index.d.ts.map +1 -0
- package/dist/migrate/builder/index.js +6 -0
- package/dist/migrate/builder/index.js.map +1 -0
- package/dist/migrate/builder/migrationBuilder.d.ts +110 -0
- package/dist/migrate/builder/migrationBuilder.d.ts.map +1 -0
- package/dist/migrate/builder/migrationBuilder.js +470 -0
- package/dist/migrate/builder/migrationBuilder.js.map +1 -0
- package/dist/migrate/builder/splitSqlStatements.d.ts +18 -0
- package/dist/migrate/builder/splitSqlStatements.d.ts.map +1 -0
- package/dist/migrate/builder/splitSqlStatements.js +44 -0
- package/dist/migrate/builder/splitSqlStatements.js.map +1 -0
- package/dist/migrate/builder/tableBuilder.d.ts +51 -0
- package/dist/migrate/builder/tableBuilder.d.ts.map +1 -0
- package/dist/migrate/builder/tableBuilder.js +291 -0
- package/dist/migrate/builder/tableBuilder.js.map +1 -0
- package/dist/migrate/builder/types.d.ts +466 -0
- package/dist/migrate/builder/types.d.ts.map +1 -0
- package/dist/migrate/builder/types.js +8 -0
- package/dist/migrate/builder/types.js.map +1 -0
- package/dist/migrate/cli-config.d.ts +3 -0
- package/dist/migrate/cli-config.d.ts.map +1 -0
- package/dist/migrate/cli-config.js +35 -0
- package/dist/migrate/cli-config.js.map +1 -0
- package/dist/migrate/cli.d.ts +20 -0
- package/dist/migrate/cli.d.ts.map +1 -0
- package/dist/migrate/cli.js +398 -0
- package/dist/migrate/cli.js.map +1 -0
- package/dist/migrate/codegen/entityCodeGenerator.d.ts +137 -0
- package/dist/migrate/codegen/entityCodeGenerator.d.ts.map +1 -0
- package/dist/migrate/codegen/entityCodeGenerator.js +405 -0
- package/dist/migrate/codegen/entityCodeGenerator.js.map +1 -0
- package/dist/migrate/codegen/entityMerger.d.ts +115 -0
- package/dist/migrate/codegen/entityMerger.d.ts.map +1 -0
- package/dist/migrate/codegen/entityMerger.js +294 -0
- package/dist/migrate/codegen/entityMerger.js.map +1 -0
- package/dist/migrate/codegen/index.d.ts +11 -0
- package/dist/migrate/codegen/index.d.ts.map +1 -0
- package/dist/migrate/codegen/index.js +15 -0
- package/dist/migrate/codegen/index.js.map +1 -0
- package/dist/migrate/codegen/migrationCodeGenerator.d.ts +62 -0
- package/dist/migrate/codegen/migrationCodeGenerator.d.ts.map +1 -0
- package/dist/migrate/codegen/migrationCodeGenerator.js +356 -0
- package/dist/migrate/codegen/migrationCodeGenerator.js.map +1 -0
- package/dist/migrate/codegen/migrationFile.d.ts +29 -0
- package/dist/migrate/codegen/migrationFile.d.ts.map +1 -0
- package/dist/migrate/codegen/migrationFile.js +48 -0
- package/dist/migrate/codegen/migrationFile.js.map +1 -0
- package/dist/migrate/codegen/smartRelationDetector.d.ts +48 -0
- package/dist/migrate/codegen/smartRelationDetector.d.ts.map +1 -0
- package/dist/migrate/codegen/smartRelationDetector.js +135 -0
- package/dist/migrate/codegen/smartRelationDetector.js.map +1 -0
- package/dist/migrate/drift/driftDetector.d.ts +80 -0
- package/dist/migrate/drift/driftDetector.d.ts.map +1 -0
- package/dist/migrate/drift/driftDetector.js +247 -0
- package/dist/migrate/drift/driftDetector.js.map +1 -0
- package/dist/migrate/drift/index.d.ts +7 -0
- package/dist/migrate/drift/index.d.ts.map +1 -0
- package/dist/migrate/drift/index.js +7 -0
- package/dist/migrate/drift/index.js.map +1 -0
- package/dist/migrate/generator/index.d.ts +3 -0
- package/dist/migrate/generator/index.d.ts.map +1 -0
- package/dist/migrate/generator/index.js +3 -0
- package/dist/migrate/generator/index.js.map +1 -0
- package/dist/migrate/generator/mongoSchemaGenerator.d.ts +48 -0
- package/dist/migrate/generator/mongoSchemaGenerator.d.ts.map +1 -0
- package/dist/migrate/generator/mongoSchemaGenerator.js +188 -0
- package/dist/migrate/generator/mongoSchemaGenerator.js.map +1 -0
- package/dist/migrate/index.d.ts +16 -0
- package/dist/migrate/index.d.ts.map +1 -0
- package/dist/migrate/index.js +23 -0
- package/dist/migrate/index.js.map +1 -0
- package/dist/migrate/introspection/abstractSqlSchemaIntrospector.d.ts +77 -0
- package/dist/migrate/introspection/abstractSqlSchemaIntrospector.d.ts.map +1 -0
- package/dist/migrate/introspection/abstractSqlSchemaIntrospector.js +156 -0
- package/dist/migrate/introspection/abstractSqlSchemaIntrospector.js.map +1 -0
- package/dist/migrate/introspection/baseSqlIntrospector.d.ts +26 -0
- package/dist/migrate/introspection/baseSqlIntrospector.d.ts.map +1 -0
- package/dist/migrate/introspection/baseSqlIntrospector.js +132 -0
- package/dist/migrate/introspection/baseSqlIntrospector.js.map +1 -0
- package/dist/migrate/introspection/index.d.ts +6 -0
- package/dist/migrate/introspection/index.d.ts.map +1 -0
- package/dist/migrate/introspection/index.js +6 -0
- package/dist/migrate/introspection/index.js.map +1 -0
- package/dist/migrate/introspection/mongoIntrospector.d.ts +15 -0
- package/dist/migrate/introspection/mongoIntrospector.d.ts.map +1 -0
- package/dist/migrate/introspection/mongoIntrospector.js +100 -0
- package/dist/migrate/introspection/mongoIntrospector.js.map +1 -0
- package/dist/migrate/introspection/mysqlIntrospector.d.ts +59 -0
- package/dist/migrate/introspection/mysqlIntrospector.d.ts.map +1 -0
- package/dist/migrate/introspection/mysqlIntrospector.js +175 -0
- package/dist/migrate/introspection/mysqlIntrospector.js.map +1 -0
- package/dist/migrate/introspection/postgresIntrospector.d.ts +55 -0
- package/dist/migrate/introspection/postgresIntrospector.d.ts.map +1 -0
- package/dist/migrate/introspection/postgresIntrospector.js +226 -0
- package/dist/migrate/introspection/postgresIntrospector.js.map +1 -0
- package/dist/migrate/introspection/sqliteIntrospector.d.ts +60 -0
- package/dist/migrate/introspection/sqliteIntrospector.d.ts.map +1 -0
- package/dist/migrate/introspection/sqliteIntrospector.js +188 -0
- package/dist/migrate/introspection/sqliteIntrospector.js.map +1 -0
- package/dist/migrate/migrator.d.ts +168 -0
- package/dist/migrate/migrator.d.ts.map +1 -0
- package/dist/migrate/migrator.js +614 -0
- package/dist/migrate/migrator.js.map +1 -0
- package/dist/migrate/schemaGenerator.d.ts +142 -0
- package/dist/migrate/schemaGenerator.d.ts.map +1 -0
- package/dist/migrate/schemaGenerator.js +693 -0
- package/dist/migrate/schemaGenerator.js.map +1 -0
- package/dist/migrate/schemaGeneratorAsync.d.ts +9 -0
- package/dist/migrate/schemaGeneratorAsync.d.ts.map +1 -0
- package/dist/migrate/schemaGeneratorAsync.js +13 -0
- package/dist/migrate/schemaGeneratorAsync.js.map +1 -0
- package/dist/migrate/storage/databaseStorage.d.ts +25 -0
- package/dist/migrate/storage/databaseStorage.d.ts.map +1 -0
- package/dist/migrate/storage/databaseStorage.js +78 -0
- package/dist/migrate/storage/databaseStorage.js.map +1 -0
- package/dist/migrate/storage/index.d.ts +3 -0
- package/dist/migrate/storage/index.d.ts.map +1 -0
- package/dist/migrate/storage/index.js +3 -0
- package/dist/migrate/storage/index.js.map +1 -0
- package/dist/migrate/storage/jsonStorage.d.ts +16 -0
- package/dist/migrate/storage/jsonStorage.d.ts.map +1 -0
- package/dist/migrate/storage/jsonStorage.js +43 -0
- package/dist/migrate/storage/jsonStorage.js.map +1 -0
- package/dist/migrate/sync/index.d.ts +7 -0
- package/dist/migrate/sync/index.d.ts.map +1 -0
- package/dist/migrate/sync/index.js +7 -0
- package/dist/migrate/sync/index.js.map +1 -0
- package/dist/migrate/sync/schemaSync.d.ts +132 -0
- package/dist/migrate/sync/schemaSync.d.ts.map +1 -0
- package/dist/migrate/sync/schemaSync.js +260 -0
- package/dist/migrate/sync/schemaSync.js.map +1 -0
- package/dist/mongo/index.d.ts +6 -0
- package/dist/mongo/index.d.ts.map +1 -0
- package/dist/mongo/index.js +6 -0
- package/dist/mongo/index.js.map +1 -0
- package/dist/mongo/mongoDialect.d.ts +83 -0
- package/dist/mongo/mongoDialect.d.ts.map +1 -0
- package/dist/mongo/mongoDialect.js +418 -0
- package/dist/mongo/mongoDialect.js.map +1 -0
- package/dist/mongo/mongodbNativeDialect.d.ts +10 -0
- package/dist/mongo/mongodbNativeDialect.d.ts.map +1 -0
- package/dist/mongo/mongodbNativeDialect.js +10 -0
- package/dist/mongo/mongodbNativeDialect.js.map +1 -0
- package/dist/mongo/mongodbQuerier.d.ts +46 -0
- package/dist/mongo/mongodbQuerier.d.ts.map +1 -0
- package/dist/mongo/mongodbQuerier.js +344 -0
- package/dist/mongo/mongodbQuerier.js.map +1 -0
- package/dist/mongo/mongodbQuerierPool.d.ts +12 -0
- package/dist/mongo/mongodbQuerierPool.d.ts.map +1 -0
- package/dist/mongo/mongodbQuerierPool.js +19 -0
- package/dist/mongo/mongodbQuerierPool.js.map +1 -0
- package/dist/mysql/index.d.ts +5 -0
- package/dist/mysql/index.d.ts.map +1 -0
- package/dist/mysql/index.js +5 -0
- package/dist/mysql/index.js.map +1 -0
- package/dist/mysql/mysql2Dialect.d.ts +10 -0
- package/dist/mysql/mysql2Dialect.d.ts.map +1 -0
- package/dist/mysql/mysql2Dialect.js +10 -0
- package/dist/mysql/mysql2Dialect.js.map +1 -0
- package/dist/mysql/mysql2Querier.d.ts +12 -0
- package/dist/mysql/mysql2Querier.d.ts.map +1 -0
- package/dist/mysql/mysql2Querier.js +34 -0
- package/dist/mysql/mysql2Querier.js.map +1 -0
- package/dist/mysql/mysql2QuerierPool.d.ts +12 -0
- package/dist/mysql/mysql2QuerierPool.d.ts.map +1 -0
- package/dist/mysql/mysql2QuerierPool.js +18 -0
- package/dist/mysql/mysql2QuerierPool.js.map +1 -0
- package/dist/mysql/mysqlDialect.d.ts +6 -0
- package/dist/mysql/mysqlDialect.d.ts.map +1 -0
- package/dist/mysql/mysqlDialect.js +6 -0
- package/dist/mysql/mysqlDialect.js.map +1 -0
- package/dist/namingStrategy/defaultNamingStrategy.d.ts +10 -0
- package/dist/namingStrategy/defaultNamingStrategy.d.ts.map +1 -0
- package/dist/namingStrategy/defaultNamingStrategy.js +15 -0
- package/dist/namingStrategy/defaultNamingStrategy.js.map +1 -0
- package/dist/namingStrategy/index.d.ts +3 -0
- package/dist/namingStrategy/index.d.ts.map +1 -0
- package/dist/namingStrategy/index.js +3 -0
- package/dist/namingStrategy/index.js.map +1 -0
- package/dist/namingStrategy/snakeCaseNamingStrategy.d.ts +9 -0
- package/dist/namingStrategy/snakeCaseNamingStrategy.d.ts.map +1 -0
- package/dist/namingStrategy/snakeCaseNamingStrategy.js +14 -0
- package/dist/namingStrategy/snakeCaseNamingStrategy.js.map +1 -0
- package/dist/neon/index.d.ts +4 -0
- package/dist/neon/index.d.ts.map +1 -0
- package/dist/neon/index.js +4 -0
- package/dist/neon/index.js.map +1 -0
- package/dist/neon/neonDialect.d.ts +11 -0
- package/dist/neon/neonDialect.d.ts.map +1 -0
- package/dist/neon/neonDialect.js +11 -0
- package/dist/neon/neonDialect.js.map +1 -0
- package/dist/neon/neonQuerier.d.ts +6 -0
- package/dist/neon/neonQuerier.d.ts.map +1 -0
- package/dist/neon/neonQuerier.js +4 -0
- package/dist/neon/neonQuerier.js.map +1 -0
- package/dist/neon/neonQuerierPool.d.ts +11 -0
- package/dist/neon/neonQuerierPool.d.ts.map +1 -0
- package/dist/neon/neonQuerierPool.js +13 -0
- package/dist/neon/neonQuerierPool.js.map +1 -0
- package/dist/nestjs/index.d.ts +2 -0
- package/dist/nestjs/index.d.ts.map +1 -0
- package/dist/nestjs/index.js +2 -0
- package/dist/nestjs/index.js.map +1 -0
- package/dist/nestjs/uqlModule.d.ts +29 -0
- package/dist/nestjs/uqlModule.d.ts.map +1 -0
- package/dist/nestjs/uqlModule.js +42 -0
- package/dist/nestjs/uqlModule.js.map +1 -0
- package/dist/options.d.ts +5 -0
- package/dist/options.d.ts.map +1 -0
- package/dist/options.js +14 -0
- package/dist/options.js.map +1 -0
- package/dist/postgres/abstractPgQuerier.d.ts +24 -0
- package/dist/postgres/abstractPgQuerier.d.ts.map +1 -0
- package/dist/postgres/abstractPgQuerier.js +33 -0
- package/dist/postgres/abstractPgQuerier.js.map +1 -0
- package/dist/postgres/abstractPgQuerierPool.d.ts +22 -0
- package/dist/postgres/abstractPgQuerierPool.d.ts.map +1 -0
- package/dist/postgres/abstractPgQuerierPool.js +21 -0
- package/dist/postgres/abstractPgQuerierPool.js.map +1 -0
- package/dist/postgres/index.d.ts +6 -0
- package/dist/postgres/index.d.ts.map +1 -0
- package/dist/postgres/index.js +6 -0
- package/dist/postgres/index.js.map +1 -0
- package/dist/postgres/pgDialect.d.ts +13 -0
- package/dist/postgres/pgDialect.d.ts.map +1 -0
- package/dist/postgres/pgDialect.js +14 -0
- package/dist/postgres/pgDialect.js.map +1 -0
- package/dist/postgres/pgQuerier.d.ts +6 -0
- package/dist/postgres/pgQuerier.d.ts.map +1 -0
- package/dist/postgres/pgQuerier.js +4 -0
- package/dist/postgres/pgQuerier.js.map +1 -0
- package/dist/postgres/pgQuerierPool.d.ts +11 -0
- package/dist/postgres/pgQuerierPool.d.ts.map +1 -0
- package/dist/postgres/pgQuerierPool.js +15 -0
- package/dist/postgres/pgQuerierPool.js.map +1 -0
- package/dist/postgres/postgresDialect.d.ts +48 -0
- package/dist/postgres/postgresDialect.d.ts.map +1 -0
- package/dist/postgres/postgresDialect.js +222 -0
- package/dist/postgres/postgresDialect.js.map +1 -0
- package/dist/postgres/postgresWireDriverCapabilities.d.ts +15 -0
- package/dist/postgres/postgresWireDriverCapabilities.d.ts.map +1 -0
- package/dist/postgres/postgresWireDriverCapabilities.js +15 -0
- package/dist/postgres/postgresWireDriverCapabilities.js.map +1 -0
- package/dist/querier/abstractPoolQuerier.d.ts +14 -0
- package/dist/querier/abstractPoolQuerier.d.ts.map +1 -0
- package/dist/querier/abstractPoolQuerier.js +31 -0
- package/dist/querier/abstractPoolQuerier.js.map +1 -0
- package/dist/querier/abstractQuerier.d.ts +138 -0
- package/dist/querier/abstractQuerier.d.ts.map +1 -0
- package/dist/querier/abstractQuerier.js +426 -0
- package/dist/querier/abstractQuerier.js.map +1 -0
- package/dist/querier/abstractQuerierPool.d.ts +27 -0
- package/dist/querier/abstractQuerierPool.d.ts.map +1 -0
- package/dist/querier/abstractQuerierPool.js +31 -0
- package/dist/querier/abstractQuerierPool.js.map +1 -0
- package/dist/querier/abstractSqlQuerier.d.ts +53 -0
- package/dist/querier/abstractSqlQuerier.d.ts.map +1 -0
- package/dist/querier/abstractSqlQuerier.js +256 -0
- package/dist/querier/abstractSqlQuerier.js.map +1 -0
- package/dist/querier/decorator/index.d.ts +5 -0
- package/dist/querier/decorator/index.d.ts.map +1 -0
- package/dist/querier/decorator/index.js +5 -0
- package/dist/querier/decorator/index.js.map +1 -0
- package/dist/querier/decorator/injectQuerier.d.ts +4 -0
- package/dist/querier/decorator/injectQuerier.d.ts.map +1 -0
- package/dist/querier/decorator/injectQuerier.js +34 -0
- package/dist/querier/decorator/injectQuerier.js.map +1 -0
- package/dist/querier/decorator/log.d.ts +7 -0
- package/dist/querier/decorator/log.d.ts.map +1 -0
- package/dist/querier/decorator/log.js +27 -0
- package/dist/querier/decorator/log.js.map +1 -0
- package/dist/querier/decorator/serialized.d.ts +7 -0
- package/dist/querier/decorator/serialized.d.ts.map +1 -0
- package/dist/querier/decorator/serialized.js +14 -0
- package/dist/querier/decorator/serialized.js.map +1 -0
- package/dist/querier/decorator/transactional.d.ts +7 -0
- package/dist/querier/decorator/transactional.d.ts.map +1 -0
- package/dist/querier/decorator/transactional.js +49 -0
- package/dist/querier/decorator/transactional.js.map +1 -0
- package/dist/querier/index.d.ts +5 -0
- package/dist/querier/index.d.ts.map +1 -0
- package/dist/querier/index.js +5 -0
- package/dist/querier/index.js.map +1 -0
- package/dist/schema/canonicalType.d.ts +54 -0
- package/dist/schema/canonicalType.d.ts.map +1 -0
- package/dist/schema/canonicalType.js +571 -0
- package/dist/schema/canonicalType.js.map +1 -0
- package/dist/schema/index.d.ts +26 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +27 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/schemaAST.d.ts +155 -0
- package/dist/schema/schemaAST.d.ts.map +1 -0
- package/dist/schema/schemaAST.js +496 -0
- package/dist/schema/schemaAST.js.map +1 -0
- package/dist/schema/schemaASTBuilder.d.ts +78 -0
- package/dist/schema/schemaASTBuilder.d.ts.map +1 -0
- package/dist/schema/schemaASTBuilder.js +259 -0
- package/dist/schema/schemaASTBuilder.js.map +1 -0
- package/dist/schema/schemaASTDiffer.d.ts +84 -0
- package/dist/schema/schemaASTDiffer.d.ts.map +1 -0
- package/dist/schema/schemaASTDiffer.js +431 -0
- package/dist/schema/schemaASTDiffer.js.map +1 -0
- package/dist/schema/types.d.ts +348 -0
- package/dist/schema/types.d.ts.map +1 -0
- package/dist/schema/types.js +11 -0
- package/dist/schema/types.js.map +1 -0
- package/dist/sqlite/abstractSqliteQuerier.d.ts +4 -0
- package/dist/sqlite/abstractSqliteQuerier.d.ts.map +1 -0
- package/dist/sqlite/abstractSqliteQuerier.js +4 -0
- package/dist/sqlite/abstractSqliteQuerier.js.map +1 -0
- package/dist/sqlite/betterSqlite3Dialect.d.ts +10 -0
- package/dist/sqlite/betterSqlite3Dialect.d.ts.map +1 -0
- package/dist/sqlite/betterSqlite3Dialect.js +10 -0
- package/dist/sqlite/betterSqlite3Dialect.js.map +1 -0
- package/dist/sqlite/index.d.ts +6 -0
- package/dist/sqlite/index.d.ts.map +1 -0
- package/dist/sqlite/index.js +6 -0
- package/dist/sqlite/index.js.map +1 -0
- package/dist/sqlite/sqliteDialect.d.ts +36 -0
- package/dist/sqlite/sqliteDialect.d.ts.map +1 -0
- package/dist/sqlite/sqliteDialect.js +155 -0
- package/dist/sqlite/sqliteDialect.js.map +1 -0
- package/dist/sqlite/sqliteQuerier.d.ts +14 -0
- package/dist/sqlite/sqliteQuerier.d.ts.map +1 -0
- package/dist/sqlite/sqliteQuerier.js +30 -0
- package/dist/sqlite/sqliteQuerier.js.map +1 -0
- package/dist/sqlite/sqliteQuerierPool.d.ts +14 -0
- package/dist/sqlite/sqliteQuerierPool.d.ts.map +1 -0
- package/dist/sqlite/sqliteQuerierPool.js +36 -0
- package/dist/sqlite/sqliteQuerierPool.js.map +1 -0
- package/dist/type/config.d.ts +43 -0
- package/dist/type/config.d.ts.map +1 -0
- package/dist/type/config.js +2 -0
- package/dist/type/config.js.map +1 -0
- package/dist/type/entity.d.ts +338 -0
- package/dist/type/entity.d.ts.map +1 -0
- package/dist/type/entity.js +5 -0
- package/dist/type/entity.js.map +1 -0
- package/dist/type/index.d.ts +12 -0
- package/dist/type/index.d.ts.map +1 -0
- package/dist/type/index.js +12 -0
- package/dist/type/index.js.map +1 -0
- package/dist/type/logger.d.ts +61 -0
- package/dist/type/logger.d.ts.map +1 -0
- package/dist/type/logger.js +2 -0
- package/dist/type/logger.js.map +1 -0
- package/dist/type/migration.d.ts +267 -0
- package/dist/type/migration.d.ts.map +1 -0
- package/dist/type/migration.js +2 -0
- package/dist/type/migration.js.map +1 -0
- package/dist/type/migratorDialect.d.ts +10 -0
- package/dist/type/migratorDialect.d.ts.map +1 -0
- package/dist/type/migratorDialect.js +16 -0
- package/dist/type/migratorDialect.js.map +1 -0
- package/dist/type/namingStrategy.d.ts +18 -0
- package/dist/type/namingStrategy.d.ts.map +1 -0
- package/dist/type/namingStrategy.js +2 -0
- package/dist/type/namingStrategy.js.map +1 -0
- package/dist/type/querier.d.ts +162 -0
- package/dist/type/querier.d.ts.map +1 -0
- package/dist/type/querier.js +11 -0
- package/dist/type/querier.js.map +1 -0
- package/dist/type/querierPool.d.ts +62 -0
- package/dist/type/querierPool.d.ts.map +1 -0
- package/dist/type/querierPool.js +2 -0
- package/dist/type/querierPool.js.map +1 -0
- package/dist/type/query.d.ts +700 -0
- package/dist/type/query.d.ts.map +1 -0
- package/dist/type/query.js +11 -0
- package/dist/type/query.js.map +1 -0
- package/dist/type/universalQuerier.d.ts +136 -0
- package/dist/type/universalQuerier.d.ts.map +1 -0
- package/dist/type/universalQuerier.js +2 -0
- package/dist/type/universalQuerier.js.map +1 -0
- package/dist/type/utility.d.ts +37 -0
- package/dist/type/utility.d.ts.map +1 -0
- package/dist/type/utility.js +2 -0
- package/dist/type/utility.js.map +1 -0
- package/dist/util/ansiSqlLiteral.d.ts +21 -0
- package/dist/util/ansiSqlLiteral.d.ts.map +1 -0
- package/dist/util/ansiSqlLiteral.js +101 -0
- package/dist/util/ansiSqlLiteral.js.map +1 -0
- package/dist/util/dialect.util.d.ts +31 -0
- package/dist/util/dialect.util.d.ts.map +1 -0
- package/dist/util/dialect.util.js +113 -0
- package/dist/util/dialect.util.js.map +1 -0
- package/dist/util/field.util.d.ts +14 -0
- package/dist/util/field.util.d.ts.map +1 -0
- package/dist/util/field.util.js +57 -0
- package/dist/util/field.util.js.map +1 -0
- package/dist/util/hook.util.d.ts +15 -0
- package/dist/util/hook.util.d.ts.map +1 -0
- package/dist/util/hook.util.js +20 -0
- package/dist/util/hook.util.js.map +1 -0
- package/dist/util/index.d.ts +10 -0
- package/dist/util/index.d.ts.map +1 -0
- package/dist/util/index.js +10 -0
- package/dist/util/index.js.map +1 -0
- package/dist/util/logger.d.ts +51 -0
- package/dist/util/logger.d.ts.map +1 -0
- package/dist/util/logger.js +144 -0
- package/dist/util/logger.js.map +1 -0
- package/dist/util/object.util.d.ts +10 -0
- package/dist/util/object.util.d.ts.map +1 -0
- package/dist/util/object.util.js +29 -0
- package/dist/util/object.util.js.map +1 -0
- package/dist/util/raw.d.ts +18 -0
- package/dist/util/raw.d.ts.map +1 -0
- package/dist/util/raw.js +20 -0
- package/dist/util/raw.js.map +1 -0
- package/dist/util/relationQuery.util.d.ts +25 -0
- package/dist/util/relationQuery.util.d.ts.map +1 -0
- package/dist/util/relationQuery.util.js +101 -0
- package/dist/util/relationQuery.util.js.map +1 -0
- package/dist/util/sql.util.d.ts +50 -0
- package/dist/util/sql.util.d.ts.map +1 -0
- package/dist/util/sql.util.js +141 -0
- package/dist/util/sql.util.js.map +1 -0
- package/dist/util/string.util.d.ts +29 -0
- package/dist/util/string.util.d.ts.map +1 -0
- package/dist/util/string.util.js +93 -0
- package/dist/util/string.util.js.map +1 -0
- package/package.json +17 -10
- package/dist/browser/cc-BVTDOeZ_.js +0 -566
- package/dist/browser/cc-BVTDOeZ_.js.map +0 -1
- package/dist/browser/mongoSchemaGenerator-BT2_u1wI.js +0 -735
- package/dist/browser/mongoSchemaGenerator-BT2_u1wI.js.map +0 -1
|
@@ -1 +1,17 @@
|
|
|
1
|
-
{"version":3,"file":"uql-browser.min.js","sources":["../../src/migrate/acquireQuerierForMigrations.ts","../../src/migrate/assertCliConfig.ts","../../src/migrate/builder/columnBuilder.ts","../../src/migrate/builder/expressions.ts","../../src/schema/canonicalType.ts","../../src/util/logger.ts","../../src/entity/metadata/definition.ts","../../src/schema/schemaAST.ts","../../src/schema/types.ts","../../src/schema/schemaASTBuilder.ts","../../src/migrate/schemaGenerator.ts","../../src/migrate/builder/splitSqlStatements.ts","../../src/migrate/builder/tableBuilder.ts","../../src/migrate/builder/migrationBuilder.ts","../../src/migrate/cli-config.ts","../../src/util/string.util.ts","../../src/migrate/codegen/entityCodeGenerator.ts","../../src/migrate/codegen/entityMerger.ts","../../src/migrate/codegen/migrationCodeGenerator.ts","../../src/migrate/codegen/migrationFile.ts","../../src/migrate/codegen/smartRelationDetector.ts","../../src/schema/schemaASTDiffer.ts","../../src/migrate/drift/driftDetector.ts","../../src/migrate/introspection/baseSqlIntrospector.ts","../../src/migrate/introspection/abstractSqlSchemaIntrospector.ts","../../src/migrate/introspection/mongoIntrospector.ts","../../src/migrate/introspection/mysqlIntrospector.ts","../../src/migrate/introspection/postgresIntrospector.ts","../../src/migrate/introspection/sqliteIntrospector.ts","../../src/schema/index.ts","../../src/migrate/schemaGeneratorAsync.ts","../../src/migrate/storage/databaseStorage.ts","../../src/migrate/migrator.ts","../../src/migrate/storage/jsonStorage.ts","../../src/migrate/sync/schemaSync.ts"],"sourcesContent":["import type { Querier, QuerierPool } from '../type/index.js';\n\n/**\n * Querier used for schema migrations and the migration journal (`DatabaseMigrationStorage`).\n *\n * Pools may override {@link QuerierPool.getMigrationQuerier} so DDL runs on a different target than\n * app traffic (e.g. LibSQL embedded replica: local `file:` + remote `syncUrl`).\n */\nexport async function acquireQuerierForMigrations(pool: QuerierPool): Promise<Querier> {\n return (await pool.getMigrationQuerier?.()) ?? (await pool.getQuerier());\n}\n","import type { Config } from '../type/index.js';\n\n/**\n * Validates shape required for the migrations CLI (real `QuerierPool`, not config stubs).\n */\nexport function assertCliConfig(config: unknown): asserts config is Config {\n if (config === null || typeof config !== 'object') {\n throw new TypeError('Config must be a non-null object');\n }\n\n const c = config as Record<string, unknown>;\n const pool = c['pool'];\n\n if (pool === null || typeof pool !== 'object') {\n throw new TypeError('Config.pool is required and must be an object');\n }\n\n const p = pool as Record<string, unknown>;\n\n for (const key of ['getQuerier', 'transaction', 'withQuerier'] as const) {\n if (typeof p[key] !== 'function') {\n throw new TypeError(`Config.pool.${key} must be a function`);\n }\n }\n\n if (p['end'] !== undefined && typeof p['end'] !== 'function') {\n throw new TypeError('Config.pool.end must be a function when provided');\n }\n\n const dialect = p['dialect'];\n if (dialect === null || typeof dialect !== 'object') {\n throw new TypeError('Config.pool.dialect is required and must be an object');\n }\n\n const dialectName = (dialect as Record<string, unknown>)['dialectName'];\n if (typeof dialectName !== 'string') {\n throw new TypeError('Config.pool.dialect.dialectName must be a string');\n }\n}\n","/**\n * Column Builder\n *\n * Fluent API for defining columns in migrations.\n */\n\nimport type { CanonicalType, ForeignKeyAction } from '../../schema/types.js';\nimport type {\n BaseColumnOptions,\n ForeignKeyDefinition,\n FullColumnDefinition,\n IColumnBuilder,\n IForeignKeyBuilder,\n} from './types.js';\n\n/**\n * Builder for column definitions with a fluent API.\n * Columns are NOT NULL by default (safer).\n */\nexport class ColumnBuilder implements IColumnBuilder, IForeignKeyBuilder {\n private _name: string;\n private _type: CanonicalType;\n private _nullable: boolean;\n private _defaultValue?: unknown;\n private _primaryKey: boolean;\n private _autoIncrement: boolean;\n private _unique: boolean;\n private _comment?: string;\n private _index?: string | boolean;\n private _foreignKey?: ForeignKeyDefinition;\n\n constructor(name: string, type: CanonicalType, options: BaseColumnOptions = {}) {\n this._name = name;\n this._type = type;\n // Apply options with defaults (non-nullable by default)\n this._nullable = options.nullable ?? false;\n this._unique = options.unique ?? false;\n this._primaryKey = options.primaryKey ?? false;\n this._autoIncrement = options.autoIncrement ?? false;\n this._defaultValue = options.defaultValue;\n this._index = options.index;\n this._comment = options.comment;\n if (options.unsigned !== undefined) {\n this._type = { ...this._type, unsigned: options.unsigned };\n }\n\n // Handle inline references option\n if (options.references) {\n this._foreignKey = {\n table: options.references.table,\n columns: [options.references.column ?? 'id'],\n onDelete: options.references.onDelete ?? 'NO ACTION',\n onUpdate: options.references.onUpdate ?? 'NO ACTION',\n };\n }\n }\n\n /**\n * Make the column nullable or not nullable.\n */\n nullable(value = true): this {\n this._nullable = value;\n return this;\n }\n\n /**\n * Make the column NOT NULL.\n */\n notNullable(): this {\n this._nullable = false;\n return this;\n }\n\n /**\n * Set a default value for the column.\n */\n defaultValue(value: unknown): this {\n this._defaultValue = value;\n return this;\n }\n\n /**\n * Mark as primary key.\n */\n primaryKey(): this {\n this._primaryKey = true;\n this._nullable = false;\n return this;\n }\n\n /**\n * Enable auto-increment (for integer types).\n */\n autoIncrement(): this {\n this._autoIncrement = true;\n return this;\n }\n\n /**\n * Add a unique constraint.\n */\n unique(): this {\n this._unique = true;\n return this;\n }\n\n /**\n * Add a comment to the column.\n */\n comment(text: string): this {\n this._comment = text;\n return this;\n }\n\n /**\n * Add an index on this column.\n * @param name - Optional index name. If true, auto-generates name.\n */\n index(name?: string): this {\n this._index = name ?? true;\n return this;\n }\n /**\n * Set as unsigned (MySQL/MariaDB).\n */\n unsigned(): this {\n this._type = { ...this._type, unsigned: true };\n return this;\n }\n\n /**\n * Add a foreign key reference.\n * Returns a ForeignKeyBuilder for additional options.\n */\n references(table: string, column = 'id'): IForeignKeyBuilder {\n this._foreignKey = {\n table,\n columns: [column],\n onDelete: 'NO ACTION',\n onUpdate: 'NO ACTION',\n };\n return this;\n }\n\n /**\n * Set ON DELETE action for foreign key.\n */\n onDelete(action: ForeignKeyAction): this {\n if (this._foreignKey) {\n this._foreignKey.onDelete = action;\n }\n return this;\n }\n\n /**\n * Set ON UPDATE action for foreign key.\n */\n onUpdate(action: ForeignKeyAction): this {\n if (this._foreignKey) {\n this._foreignKey.onUpdate = action;\n }\n return this;\n }\n\n /**\n * Build and return the column definition.\n */\n build(): FullColumnDefinition {\n return {\n name: this._name,\n type: this._type,\n nullable: this._nullable,\n defaultValue: this._defaultValue,\n primaryKey: this._primaryKey,\n autoIncrement: this._autoIncrement,\n unique: this._unique,\n comment: this._comment,\n index: this._index,\n foreignKey: this._foreignKey,\n };\n }\n}\n","/**\n * SQL Expressions\n *\n * Type-safe SQL expressions for default values and other uses.\n * Provides a `t` helper with common expressions.\n */\n\n/**\n * Represents a raw SQL expression (not a literal value).\n */\nexport class SqlExpression {\n constructor(readonly sql: string) {}\n\n toString(): string {\n return this.sql;\n }\n\n /**\n * Check if a value is a SQL expression.\n */\n static isExpression(value: unknown): value is SqlExpression {\n return value instanceof SqlExpression;\n }\n}\n\n/**\n * Helper object for common SQL expressions.\n * Use in migrations: `table.timestamp('createdAt').defaultValue(t.now())`\n */\nexport const t = {\n /**\n * Current timestamp (NOW() or CURRENT_TIMESTAMP depending on dialect).\n */\n now(): SqlExpression {\n return new SqlExpression('CURRENT_TIMESTAMP');\n },\n\n /**\n * Current date (CURRENT_DATE).\n */\n currentDate(): SqlExpression {\n return new SqlExpression('CURRENT_DATE');\n },\n\n /**\n * Current time (CURRENT_TIME).\n */\n currentTime(): SqlExpression {\n return new SqlExpression('CURRENT_TIME');\n },\n\n /**\n * NULL value.\n */\n null(): SqlExpression {\n return new SqlExpression('NULL');\n },\n\n /**\n * Boolean true.\n */\n true(): SqlExpression {\n return new SqlExpression('TRUE');\n },\n\n /**\n * Boolean false.\n */\n false(): SqlExpression {\n return new SqlExpression('FALSE');\n },\n\n /**\n * Generate UUID (Postgres: gen_random_uuid(), MySQL: UUID()).\n */\n uuid(): SqlExpression {\n return new SqlExpression('gen_random_uuid()');\n },\n\n /**\n * Auto-generate UUID for MySQL.\n */\n mysqlUuid(): SqlExpression {\n return new SqlExpression('UUID()');\n },\n\n /**\n * Raw SQL expression.\n * Use for custom expressions not covered by helpers.\n */\n raw(sql: string): SqlExpression {\n return new SqlExpression(sql);\n },\n\n /**\n * String literal with proper escaping.\n */\n literal(value: string): SqlExpression {\n // Escape single quotes by doubling them\n const escaped = value.replace(/'/g, \"''\");\n return new SqlExpression(`'${escaped}'`);\n },\n\n /**\n * Numeric literal.\n */\n number(value: number): SqlExpression {\n return new SqlExpression(String(value));\n },\n\n /**\n * Empty JSON object.\n */\n emptyObject(): SqlExpression {\n return new SqlExpression(\"'{}'::jsonb\");\n },\n\n /**\n * Empty JSON array.\n */\n emptyArray(): SqlExpression {\n return new SqlExpression(\"'[]'::jsonb\");\n },\n\n /**\n * MySQL: ON UPDATE CURRENT_TIMESTAMP.\n */\n onUpdateNow(): SqlExpression {\n return new SqlExpression('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP');\n },\n};\n\n/**\n * Format a default value for SQL.\n * Handles SqlExpression vs literal values.\n */\nexport function formatDefaultValue(value: unknown): string {\n if (value === undefined || value === null) {\n return 'NULL';\n }\n\n if (SqlExpression.isExpression(value)) {\n return value.sql;\n }\n\n if (typeof value === 'string') {\n // Escape single quotes for string literals\n const escaped = value.replace(/'/g, \"''\");\n return `'${escaped}'`;\n }\n\n if (typeof value === 'number') {\n return String(value);\n }\n\n if (typeof value === 'boolean') {\n return value ? 'TRUE' : 'FALSE';\n }\n\n if (value instanceof Date) {\n return `'${value.toISOString()}'`;\n }\n\n if (typeof value === 'object') {\n // JSON value\n const json = JSON.stringify(value).replace(/'/g, \"''\");\n return `'${json}'`;\n }\n\n return String(value);\n}\n","/**\n * Canonical Type System\n *\n * Provides bidirectional mapping between:\n * - SQL types (dialect-specific)\n * - Canonical types (dialect-agnostic)\n * - TypeScript types (for entity generation)\n */\n\nimport type { AbstractDialect } from '../dialect/abstractDialect.js';\nimport type { ColumnType, FieldOptions } from '../type/entity.js';\nimport type { DialectName } from '../type/index.js';\nimport type { CanonicalType, SizeVariant, TypeCategory } from './types.js';\n\n// ============================================================================\n// Vector Category Helpers\n// ============================================================================\n\n/** Type guard for all vector-family categories. */\nexport function isVectorCategory(category: TypeCategory): boolean {\n return category === 'vector' || category === 'halfvec' || category === 'sparsevec';\n}\n\n/** Vector cast types supported by pgvector. */\nexport type VectorCast = 'vector' | 'halfvec' | 'sparsevec';\n\n/**\n * Resolve the effective vector cast type from field options.\n * Follows the canonical type system priority: `columnType > type`.\n */\nexport function resolveVectorCast(field: { type?: unknown; columnType?: unknown } | undefined): VectorCast {\n const raw = field?.columnType ?? field?.type;\n if (raw === 'halfvec') return 'halfvec';\n if (raw === 'sparsevec') return 'sparsevec';\n return 'vector';\n}\n\n// Type Mapping Tables\n// ============================================================================\n\n/**\n * Maps SQL type strings to canonical type categories.\n * Handles variations across dialects (PostgreSQL, MySQL, SQLite).\n */\nconst SQL_TO_CANONICAL: Record<string, Partial<CanonicalType>> = {\n // === Integers ===\n int: { category: 'integer' },\n int4: { category: 'integer' },\n integer: { category: 'integer' },\n tinyint: { category: 'integer', size: 'tiny' },\n smallint: { category: 'integer', size: 'small' },\n int2: { category: 'integer', size: 'small' },\n mediumint: { category: 'integer', size: 'medium' },\n bigint: { category: 'integer', size: 'big' },\n int8: { category: 'integer', size: 'big' },\n serial: { category: 'integer' },\n bigserial: { category: 'integer', size: 'big' },\n smallserial: { category: 'integer', size: 'small' },\n\n // === Floats ===\n float: { category: 'float' },\n float4: { category: 'float' },\n real: { category: 'float' },\n float8: { category: 'float', size: 'big' },\n double: { category: 'float', size: 'big' },\n 'double precision': { category: 'float', size: 'big' },\n\n // === Decimals ===\n decimal: { category: 'decimal' },\n numeric: { category: 'decimal' },\n money: { category: 'decimal' },\n\n // === Strings ===\n char: { category: 'string' },\n character: { category: 'string' },\n varchar: { category: 'string' },\n 'character varying': { category: 'string' },\n text: { category: 'string', size: 'small' },\n tinytext: { category: 'string', size: 'tiny' },\n mediumtext: { category: 'string', size: 'medium' },\n longtext: { category: 'string', size: 'big' },\n\n // === Boolean ===\n bool: { category: 'boolean' },\n boolean: { category: 'boolean' },\n bit: { category: 'boolean' },\n\n // === Date/Time ===\n date: { category: 'date' },\n time: { category: 'time' },\n 'time without time zone': { category: 'time' },\n 'time with time zone': { category: 'time', withTimezone: true },\n timetz: { category: 'time', withTimezone: true },\n timestamp: { category: 'timestamp' },\n 'timestamp without time zone': { category: 'timestamp' },\n 'timestamp with time zone': { category: 'timestamp', withTimezone: true },\n timestamptz: { category: 'timestamp', withTimezone: true },\n datetime: { category: 'timestamp' },\n\n // === JSON ===\n json: { category: 'json' },\n jsonb: { category: 'json' },\n\n // === UUID ===\n uuid: { category: 'uuid' },\n\n // === Binary ===\n blob: { category: 'blob' },\n bytea: { category: 'blob' },\n binary: { category: 'blob' },\n varbinary: { category: 'blob' },\n tinyblob: { category: 'blob', size: 'tiny' },\n mediumblob: { category: 'blob', size: 'medium' },\n longblob: { category: 'blob', size: 'big' },\n\n // === Vector (for AI/embeddings) ===\n vector: { category: 'vector' },\n halfvec: { category: 'halfvec' },\n sparsevec: { category: 'sparsevec' },\n};\n\nconst PG_TYPE_MAP: Record<TypeCategory, string> = {\n integer: 'INTEGER',\n float: 'REAL',\n decimal: 'NUMERIC',\n string: 'VARCHAR',\n boolean: 'BOOLEAN',\n date: 'DATE',\n time: 'TIME',\n timestamp: 'TIMESTAMP',\n json: 'JSONB',\n uuid: 'UUID',\n blob: 'BYTEA',\n vector: 'VECTOR',\n halfvec: 'HALFVEC',\n sparsevec: 'SPARSEVEC',\n};\n\nconst CANONICAL_TO_SQL: Record<DialectName, Record<TypeCategory, string>> = {\n postgres: PG_TYPE_MAP,\n cockroachdb: PG_TYPE_MAP,\n mysql: {\n integer: 'INT',\n float: 'FLOAT',\n decimal: 'DECIMAL',\n string: 'VARCHAR',\n boolean: 'TINYINT(1)',\n date: 'DATE',\n time: 'TIME',\n timestamp: 'DATETIME',\n json: 'JSON',\n uuid: 'CHAR(36)',\n blob: 'BLOB',\n vector: 'JSON', // MySQL doesn't have native vector type\n halfvec: 'JSON',\n sparsevec: 'JSON',\n },\n sqlite: {\n integer: 'INTEGER',\n float: 'REAL',\n decimal: 'REAL',\n string: 'TEXT',\n boolean: 'INTEGER',\n date: 'TEXT',\n time: 'TEXT',\n timestamp: 'TEXT',\n json: 'TEXT',\n uuid: 'TEXT',\n blob: 'BLOB',\n vector: 'TEXT',\n halfvec: 'TEXT',\n sparsevec: 'TEXT',\n },\n mariadb: {\n integer: 'INT',\n float: 'FLOAT',\n decimal: 'DECIMAL',\n string: 'VARCHAR',\n boolean: 'TINYINT(1)',\n date: 'DATE',\n time: 'TIME',\n timestamp: 'DATETIME',\n json: 'JSON',\n uuid: 'CHAR(36)',\n blob: 'BLOB',\n vector: 'VECTOR',\n halfvec: 'VECTOR', // MariaDB only supports VECTOR; no native halfvec/sparsevec\n sparsevec: 'VECTOR',\n },\n // MongoDB uses BSON types, not SQL types. These are placeholders for compatibility.\n mongodb: {\n integer: 'int',\n float: 'double',\n decimal: 'decimal128',\n string: 'string',\n boolean: 'bool',\n date: 'date',\n time: 'string',\n timestamp: 'timestamp',\n json: 'object',\n uuid: 'binData',\n blob: 'binData',\n vector: 'array',\n halfvec: 'array',\n sparsevec: 'array',\n },\n};\n\n/**\n * Size variant modifiers for SQL types.\n */\nconst PG_SIZE_MODIFIERS: Partial<Record<TypeCategory, Record<SizeVariant, string>>> = {\n integer: {\n tiny: 'SMALLINT',\n small: 'SMALLINT',\n medium: 'INTEGER',\n big: 'BIGINT',\n },\n float: {\n tiny: 'REAL',\n small: 'REAL',\n medium: 'DOUBLE PRECISION',\n big: 'DOUBLE PRECISION',\n },\n};\n\nconst SIZE_MODIFIERS: Record<DialectName, Partial<Record<TypeCategory, Record<SizeVariant, string>>>> = {\n postgres: PG_SIZE_MODIFIERS,\n cockroachdb: PG_SIZE_MODIFIERS,\n mysql: {\n integer: {\n tiny: 'TINYINT',\n small: 'SMALLINT',\n medium: 'MEDIUMINT',\n big: 'BIGINT',\n },\n float: {\n tiny: 'FLOAT',\n small: 'FLOAT',\n medium: 'DOUBLE',\n big: 'DOUBLE',\n },\n string: {\n tiny: 'TINYTEXT',\n small: 'TEXT',\n medium: 'MEDIUMTEXT',\n big: 'LONGTEXT',\n },\n blob: {\n tiny: 'TINYBLOB',\n small: 'BLOB',\n medium: 'MEDIUMBLOB',\n big: 'LONGBLOB',\n },\n },\n sqlite: {}, // SQLite uses affinity, no size modifiers\n mariadb: {\n integer: {\n tiny: 'TINYINT',\n small: 'SMALLINT',\n medium: 'MEDIUMINT',\n big: 'BIGINT',\n },\n },\n mongodb: {},\n};\n\n/**\n * Maps canonical types to TypeScript types for entity generation.\n */\nconst CANONICAL_TO_TS: Record<TypeCategory, string> = {\n integer: 'number',\n float: 'number',\n decimal: 'number',\n string: 'string',\n boolean: 'boolean',\n date: 'Date',\n time: 'string',\n timestamp: 'Date',\n json: 'unknown',\n uuid: 'string',\n blob: 'Buffer',\n vector: 'number[]',\n halfvec: 'number[]',\n sparsevec: 'number[]',\n};\n\n// ============================================================================\n// Type Conversion Functions\n// ============================================================================\n\n/**\n * Parse a SQL type string into a canonical type.\n * Handles complex types like VARCHAR(255), DECIMAL(10,2), etc.\n */\nexport function sqlToCanonical(sqlType: string): CanonicalType {\n const normalized = sqlType.toLowerCase().trim();\n\n // Check for UNSIGNED modifier before extracting base type\n const hasUnsigned = normalized.includes('unsigned');\n const withoutUnsigned = normalized.replace(/\\s*unsigned\\s*/i, ' ').trim();\n\n // Extract base type and parameters: \"VARCHAR(255)\" -> [\"varchar\", \"255\"]\n const match = withoutUnsigned.match(/^([a-z][a-z0-9 ]*?)(?:\\(([^)]+)\\))?$/);\n if (!match) {\n return { category: 'string', raw: sqlType };\n }\n\n const [, baseType, params] = match;\n const base = SQL_TO_CANONICAL[baseType];\n\n if (!base) {\n // Unknown type - pass through as raw\n return { category: 'string', raw: sqlType };\n }\n\n const result: CanonicalType = {\n category: base.category!,\n size: base.size,\n withTimezone: base.withTimezone,\n };\n\n // Parse parameters\n if (params) {\n const paramParts = params.split(',').map((p) => p.trim());\n\n if (result.category === 'string' || result.category === 'blob') {\n // VARCHAR(255) -> length\n const length = Number.parseInt(paramParts[0], 10);\n if (!Number.isNaN(length)) {\n (result as { length: number }).length = length;\n }\n } else if (result.category === 'decimal') {\n // DECIMAL(10,2) -> precision, scale\n const precision = Number.parseInt(paramParts[0], 10);\n const scale = paramParts[1] ? Number.parseInt(paramParts[1], 10) : undefined;\n if (!Number.isNaN(precision)) {\n (result as { precision: number }).precision = precision;\n }\n if (scale !== undefined && !Number.isNaN(scale)) {\n (result as { scale: number }).scale = scale;\n }\n } else if (isVectorCategory(result.category)) {\n // VECTOR(1536), HALFVEC(1536), SPARSEVEC(4000) -> length (dimensions)\n const dimensions = Number.parseInt(paramParts[0], 10);\n if (!Number.isNaN(dimensions)) {\n (result as { length: number }).length = dimensions;\n }\n }\n }\n\n // Check for UNSIGNED modifier\n if (hasUnsigned) {\n (result as { unsigned: boolean }).unsigned = true;\n }\n\n return result;\n}\n\n/**\n * Convert a canonical type to a SQL type string for a specific dialect instance.\n */\nexport function canonicalToSql(type: CanonicalType, dialect: AbstractDialect): string {\n if (type.raw) return type.raw;\n\n const dialectName = dialect.dialectName;\n let sqlType = getBaseSqlType(type, dialectName);\n\n if (type.category === 'string') {\n sqlType = formatStringSqlType(type, dialect);\n } else if (type.category === 'decimal') {\n sqlType = formatDecimalSqlType(type, dialectName, sqlType);\n } else if (isVectorCategory(type.category) && type.length && dialect.features.vectorSupportsLength) {\n sqlType = `${sqlType}(${type.length})`;\n }\n\n if (type.category === 'timestamp' && type.withTimezone && dialect.features.supportsTimestamptz) {\n sqlType = 'TIMESTAMPTZ';\n }\n\n if (type.unsigned && (dialectName === 'mysql' || dialectName === 'mariadb')) {\n sqlType = `${sqlType} UNSIGNED`;\n }\n\n return sqlType;\n}\n\nfunction getBaseSqlType(type: CanonicalType, dialect: DialectName): string {\n let sqlType = CANONICAL_TO_SQL[dialect][type.category];\n if (type.size) {\n const sizeMap = SIZE_MODIFIERS[dialect][type.category];\n if (sizeMap?.[type.size]) {\n sqlType = sizeMap[type.size];\n }\n }\n return sqlType;\n}\n\nfunction formatStringSqlType(type: CanonicalType, dialect: AbstractDialect): string {\n const { dialectName, features } = dialect;\n if (dialectName === 'sqlite') return 'TEXT';\n if (features.defaultStringAsText) return type.length ? `VARCHAR(${type.length})` : 'TEXT';\n if (dialectName === 'mysql' || dialectName === 'mariadb') {\n if (type.size === 'tiny') return 'TINYTEXT';\n if (type.size === 'small') return 'TEXT';\n if (type.size === 'medium') return 'MEDIUMTEXT';\n if (type.size === 'big') return 'LONGTEXT';\n return type.length ? `VARCHAR(${type.length})` : 'VARCHAR(255)';\n }\n return type.length ? `VARCHAR(${type.length})` : 'VARCHAR(255)';\n}\n\nfunction formatDecimalSqlType(type: CanonicalType, dialect: DialectName, baseType: string): string {\n const p = type.precision ?? (dialect === 'mysql' || dialect === 'mariadb' ? 10 : undefined);\n const s = type.scale ?? (dialect === 'mysql' || dialect === 'mariadb' ? 2 : undefined);\n if (p !== undefined) {\n return s !== undefined ? `${baseType}(${p}, ${s})` : `${baseType}(${p})`;\n }\n return baseType;\n}\n\n/**\n * Convert a canonical type to a TypeScript type string.\n */\nexport function canonicalToTypeScript(type: CanonicalType): string {\n return CANONICAL_TO_TS[type.category];\n}\n\n/**\n * Convert UQL FieldOptions to a canonical type.\n */\nexport function fieldOptionsToCanonical(options: FieldOptions, tsType?: unknown): CanonicalType {\n // If explicit columnType is specified, use it\n if (options.columnType) {\n const base = sqlToCanonical(options.columnType);\n return {\n ...base,\n length: options.length ?? base.length,\n precision: options.precision ?? base.precision,\n scale: options.scale ?? base.scale,\n };\n }\n\n // Infer from type (could be constructor or string)\n const type = options.type || tsType;\n\n if (type === String) {\n return {\n category: 'string',\n length: options.length,\n };\n }\n\n if (type === Number) {\n if (options.precision || options.scale) {\n return {\n category: 'decimal',\n precision: options.precision,\n scale: options.scale,\n };\n }\n // Infer bigint for Number if autoIncrement is true or if it's a primary key\n if (options.autoIncrement || options.isId) {\n return { category: 'integer', size: 'big' };\n }\n return { category: 'integer', size: 'big' };\n }\n\n if (type === Boolean) {\n return { category: 'boolean' };\n }\n\n if (type === Date) {\n return { category: 'timestamp' };\n }\n\n if (type === BigInt) {\n return { category: 'integer', size: 'big' };\n }\n\n if (typeof type === 'string') {\n const canonical = sqlToCanonical(type);\n // Propagate explicit dimensions into CanonicalType.length for vector types\n if (options.dimensions && isVectorCategory(canonical.category)) {\n return { ...canonical, length: options.dimensions };\n }\n return canonical;\n }\n\n // Default to string\n return { category: 'string', length: options.length };\n}\n\n/**\n * Compare two canonical types for equality.\n * Used for schema diffing.\n */\nexport function areTypesEqual(a: CanonicalType, b: CanonicalType): boolean {\n // Category must match\n if (a.category !== b.category) {\n return false;\n }\n\n // Size must match (if specified)\n if (a.size !== b.size) {\n return false;\n }\n\n // For strings, compare length (allowing for default 255)\n if (a.category === 'string') {\n const lengthA = a.length ?? 255;\n const lengthB = b.length ?? 255;\n if (lengthA !== lengthB) {\n return false;\n }\n }\n\n // For decimals, compare precision and scale (allowing for default 10, 2)\n if (a.category === 'decimal') {\n const pA = a.precision ?? 10;\n const pB = b.precision ?? 10;\n const sA = a.scale ?? 2;\n const sB = b.scale ?? 2;\n if (pA !== pB || sA !== sB) {\n return false;\n }\n }\n\n // For timestamps, compare timezone\n if (a.category === 'timestamp') {\n if (!!a.withTimezone !== !!b.withTimezone) {\n return false;\n }\n }\n\n // Unsigned must match\n if (!!a.unsigned !== !!b.unsigned) {\n return false;\n }\n\n return true;\n}\n\n/**\n * Check if changing from type A to type B could cause data loss.\n */\nexport function isBreakingTypeChange(from: CanonicalType, to: CanonicalType): boolean {\n // Changing category is always potentially breaking\n if (from.category !== to.category) {\n return true;\n }\n\n // Reducing size is breaking\n const sizeOrder: SizeVariant[] = ['tiny', 'small', 'medium', 'big'];\n if (from.size && to.size) {\n const fromIndex = sizeOrder.indexOf(from.size);\n const toIndex = sizeOrder.indexOf(to.size);\n if (toIndex < fromIndex) {\n return true;\n }\n }\n\n // Reducing string length is breaking\n if (from.category === 'string' && from.length && to.length) {\n if (to.length < from.length) {\n return true;\n }\n }\n\n // Reducing precision/scale is breaking\n if (from.category === 'decimal') {\n if (from.precision && to.precision && to.precision < from.precision) {\n return true;\n }\n if (from.scale && to.scale && to.scale < from.scale) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Get the UQL ColumnType that best matches a canonical type.\n */\nexport function canonicalToColumnType(type: CanonicalType): ColumnType {\n switch (type.category) {\n case 'integer':\n if (type.size === 'big') return 'bigint';\n if (type.size === 'small') return 'smallint';\n return 'int';\n case 'float':\n if (type.size === 'big') return 'double';\n return 'float';\n case 'decimal':\n return 'decimal';\n case 'string':\n if (!type.length || type.length > 10000) return 'text';\n return 'varchar';\n case 'boolean':\n return 'boolean';\n case 'date':\n return 'date';\n case 'time':\n return 'time';\n case 'timestamp':\n return type.withTimezone ? 'timestamptz' : 'timestamp';\n case 'json':\n return 'jsonb';\n case 'uuid':\n return 'uuid';\n case 'blob':\n return 'bytea';\n case 'vector':\n return 'vector';\n case 'halfvec':\n return 'halfvec';\n case 'sparsevec':\n return 'sparsevec';\n default:\n return 'varchar';\n }\n}\n","import type { Logger, LoggerFunction, LoggingOptions, LogLevel } from '../type/logger.js';\nimport type { SlowQueryOptions } from '../type/querier.js';\n\nconst DEFAULT_LOG_LEVELS = [\n 'query',\n 'info',\n 'warn',\n 'error',\n 'schema',\n 'migration',\n 'skippedMigration',\n] as const satisfies LogLevel[];\n\n/**\n * Default implementation of the Logger interface using console methods.\n */\nexport class DefaultLogger implements Logger {\n logQuery(query: string, values?: unknown[], duration?: number): void {\n const time = duration !== undefined ? ` [${duration}ms]` : '';\n const params = values?.length ? ` -- ${JSON.stringify(values)}` : '';\n console.log(`\\x1b[36mquery:\\x1b[0m ${query}${params}\\x1b[32m${time}\\x1b[0m`);\n }\n\n logSlowQuery(query: string, values?: unknown[], duration?: number, logParams = true): void {\n const time = duration !== undefined ? ` [${duration}ms]` : '';\n const params = logParams && values?.length ? ` -- ${JSON.stringify(values)}` : '';\n console.warn(`\\x1b[33mslow query:\\x1b[0m ${query}${params}\\x1b[31m${time}\\x1b[0m`);\n }\n\n logWarn(message: string): void {\n console.warn(`\\x1b[33mwarn:\\x1b[0m ${message}`);\n }\n\n logError(message: string, error?: unknown): void {\n console.error(`\\x1b[31merror:\\x1b[0m ${message}`, error);\n }\n\n logInfo(message: string): void {\n console.info(`\\x1b[34minfo:\\x1b[0m ${message}`);\n }\n\n logSchema(message: string): void {\n console.log(`\\x1b[35mschema:\\x1b[0m ${message}`);\n }\n\n logMigration(message: string): void {\n console.log(`\\x1b[32mmigration:\\x1b[0m ${message}`);\n }\n\n logSkippedMigration(message: string): void {\n console.info(`\\x1b[33mskipped migration:\\x1b[0m ${message}`);\n }\n}\n\n/**\n * A wrapper class that implements the Logger interface and handles different logging options.\n */\nexport class LoggerWrapper implements Logger {\n private readonly levels: Set<LogLevel>;\n private readonly logger?: Logger;\n private readonly loggerFunction?: LoggerFunction;\n\n constructor(\n options: LoggingOptions,\n private readonly slowQuery?: SlowQueryOptions,\n ) {\n this.levels = new Set();\n\n if (options === true) {\n this.levels = new Set(DEFAULT_LOG_LEVELS);\n this.logger = new DefaultLogger();\n } else if (Array.isArray(options)) {\n this.levels = new Set(options);\n this.logger = new DefaultLogger();\n } else if (typeof options === 'function') {\n this.levels = new Set(DEFAULT_LOG_LEVELS);\n this.loggerFunction = options;\n } else if (options && typeof options === 'object') {\n this.levels = new Set(DEFAULT_LOG_LEVELS);\n this.logger = options;\n }\n\n if (slowQuery !== undefined && !this.logger && !this.loggerFunction) {\n this.logger = new DefaultLogger();\n }\n }\n\n logQuery(query: string, values?: unknown[], duration?: number): void {\n if (this.slowQuery !== undefined && duration !== undefined && duration >= this.slowQuery.threshold) {\n const logParams = this.slowQuery.logParams !== false;\n if (this.logger?.logSlowQuery) {\n this.logger.logSlowQuery(query, values, duration, logParams);\n return;\n }\n if (this.loggerFunction) {\n this.loggerFunction(query, logParams ? values : undefined, duration);\n return;\n }\n // If slowQuery threshold is met but no specific slowQuery logger exists,\n // it falls through to the standard logQuery below.\n }\n\n if (this.levels.has('query')) {\n if (this.logger?.logQuery) {\n this.logger.logQuery(query, values, duration);\n } else if (this.loggerFunction) {\n this.loggerFunction(query, values, duration);\n }\n }\n }\n\n logWarn(message: string): void {\n this.log('warn', message);\n }\n\n logError(message: string, error?: unknown): void {\n this.log('error', message, error);\n }\n\n logInfo(message: string): void {\n this.log('info', message);\n }\n\n logSchema(message: string): void {\n this.log('schema', message);\n }\n\n logMigration(message: string): void {\n this.log('migration', message);\n }\n\n logSkippedMigration(message: string): void {\n this.log('skippedMigration', message);\n }\n\n private log(level: LogLevel, message: string, error?: unknown) {\n if (this.levels.has(level)) {\n const method = `log${level.charAt(0).toUpperCase()}${level.slice(1)}` as keyof Logger;\n const args = error !== undefined ? [message, error] : [message];\n if (this.logger?.[method]) {\n const logFn = this.logger[method] as (m: string, e?: unknown) => void;\n logFn(...(args as [string, unknown?]));\n } else if (this.loggerFunction) {\n this.loggerFunction(...(args as [string, unknown?]));\n }\n }\n }\n}\n","import 'reflect-metadata';\nimport type {\n EntityIndexMeta,\n EntityMeta,\n EntityOptions,\n FieldKey,\n FieldOptions,\n FieldType,\n HookEvent,\n IdKey,\n Key,\n RelationKey,\n RelationKeyMap,\n RelationOptions,\n Type,\n} from '../../type/index.js';\nimport { getKeys, hasKeys, lowerFirst, upperFirst } from '../../util/index.js';\nimport { LoggerWrapper } from '../../util/logger.js';\n\n// biome-ignore lint/suspicious/noExplicitAny: heterogeneous registry — stores EntityMeta for all entity types\ntype Meta = Map<Type<unknown>, EntityMeta<any>>;\nconst holder = globalThis as unknown as Record<symbol, Meta>;\nconst metaKey = Symbol.for('uql-orm/entity/metadata');\nconst metas: Meta = holder[metaKey] ?? new Map();\nholder[metaKey] = metas;\n\nconst registrationLogger = new LoggerWrapper(true);\n\n/**\n * Append a composite index entry with normalized `unique` (default false).\n */\nexport function appendEntityIndex<E>(meta: EntityMeta<E>, index: EntityIndexMeta): void {\n if (!meta.indexes) meta.indexes = [];\n meta.indexes.push({ ...index, unique: index.unique ?? false });\n}\n\nexport function defineField<E>(entity: Type<E>, key: string, opts: FieldOptions = {}): EntityMeta<E> {\n const meta = ensureMeta(entity);\n if (!opts.type) {\n const type = inferType(entity, key);\n opts = { ...opts, type };\n }\n const fieldKey = key as FieldKey<E>;\n meta.fields[fieldKey] = { ...meta.fields[fieldKey], ...{ name: key, ...opts } };\n return meta;\n}\n\nexport function defineId<E>(entity: Type<E>, key: string, opts: FieldOptions): EntityMeta<E> {\n const meta = ensureMeta(entity);\n const id = getIdKey(meta);\n if (id) {\n registrationLogger.logInfo(`Overriding ID property for '${entity.name}' from '${id}' to '${key}'`);\n delete meta.fields[id];\n }\n return defineField(entity, key, { ...opts, isId: true });\n}\n\nexport function defineRelation<E>(entity: Type<E>, key: string, opts: RelationOptions<E>): EntityMeta<E> {\n const resolved: RelationOptions<E> = opts.entity\n ? opts\n : (() => {\n const inferredType = inferEntityType(entity, key);\n return { ...opts, entity: () => inferredType };\n })();\n const meta = ensureMeta(entity);\n const relKey = key as RelationKey<E>;\n meta.relations[relKey] = { ...meta.relations[relKey], ...resolved };\n return meta;\n}\n\nexport function defineHook<E>(entity: Type<E>, methodName: string, event: HookEvent): EntityMeta<E> {\n const meta = ensureMeta(entity);\n if (!meta.hooks) meta.hooks = {};\n if (!meta.hooks[event]) meta.hooks[event] = [];\n meta.hooks[event].push({ methodName });\n return meta;\n}\n\nfunction applyBulkFields<E>(entity: Type<E>, fields: Record<string, FieldOptions>): void {\n for (const key of Object.keys(fields)) {\n const spec = fields[key];\n if (!spec) continue;\n if (spec.isId) {\n defineId(entity, key, spec);\n } else {\n defineField(entity, key, spec);\n }\n }\n}\n\nfunction applyBulkRelations<E>(entity: Type<E>, relations: Record<string, RelationOptions<E>>): void {\n for (const key of Object.keys(relations)) {\n const spec = relations[key];\n if (spec) defineRelation(entity, key, spec);\n }\n}\n\nfunction applyBulkIndexes<E>(entity: Type<E>, indexes: readonly EntityIndexMeta[]): void {\n const meta = ensureMeta(entity);\n for (const idx of indexes) {\n appendEntityIndex(meta, idx);\n }\n}\n\nfunction applyBulkHooks<E>(entity: Type<E>, hooks: NonNullable<EntityOptions<E>['hooks']>): void {\n for (const event of Object.keys(hooks) as HookEvent[]) {\n const methodNames = hooks[event];\n if (!methodNames?.length) continue;\n for (const methodName of methodNames) {\n defineHook(entity, methodName, event);\n }\n }\n}\n\n/**\n * Applies `fields`, `relations`, `indexes`, and `hooks` from {@link EntityOptions} before\n * entity finalization. Used by `defineEntity` for decorator-free registration.\n */\nfunction applyBulkEntityOptions<E>(entity: Type<E>, opts: EntityOptions<E>): void {\n if (opts.fields) applyBulkFields(entity, opts.fields);\n if (opts.relations) applyBulkRelations(entity, opts.relations);\n if (opts.indexes?.length) applyBulkIndexes(entity, opts.indexes);\n if (opts.hooks) applyBulkHooks(entity, opts.hooks);\n}\n\nexport function defineEntity<E>(entity: Type<E>, opts: EntityOptions<E> = {}): EntityMeta<E> {\n const meta = ensureMeta(entity);\n applyBulkEntityOptions(entity, opts);\n\n if (!hasKeys(meta.fields)) {\n throw TypeError(`'${entity.name}' must have fields`);\n }\n\n const onDeleteKeys = getKeys(meta.fields).filter((key) => meta.fields[key]?.onDelete) as FieldKey<E>[];\n\n if (onDeleteKeys.length > 1) {\n throw TypeError(`'${entity.name}' must have one field with 'onDelete' as maximum`);\n }\n\n if (opts.softDelete) {\n if (!onDeleteKeys.length) {\n throw TypeError(`'${entity.name}' must have one field with 'onDelete' to enable 'softDelete'`);\n }\n meta.softDelete = onDeleteKeys[0];\n }\n\n meta.name = opts.name ?? entity.name;\n let proto: FunctionConstructor = Object.getPrototypeOf(entity.prototype);\n\n while (proto.constructor !== Object) {\n const parentMeta = ensureMeta(proto.constructor as Type<E>);\n extendMeta(meta, parentMeta);\n proto = Object.getPrototypeOf(proto);\n }\n\n const id = getIdKey(meta);\n if (!id) {\n throw TypeError(\n `'${entity.name}' must have exactly one id field (use @Id, defineId, or defineEntity({ fields: { ..., isId: true } }))`,\n );\n }\n meta.id = id;\n\n return meta;\n}\n\nexport function getEntities(): Type<unknown>[] {\n return [...metas.entries()].reduce((acc, [key, val]) => {\n if (val.id) {\n acc.push(key);\n }\n return acc;\n }, [] as Type<unknown>[]);\n}\n\nexport function ensureMeta<E>(entity: Type<E>): EntityMeta<E> {\n let meta = metas.get(entity);\n if (meta) {\n return meta;\n }\n meta = { entity, id: '', fields: {}, relations: {} };\n metas.set(entity, meta);\n return meta;\n}\n\nexport function getMeta<E>(entity: Type<E>): EntityMeta<E> {\n const meta = metas.get(entity);\n if (!meta) {\n throw TypeError(`'${entity.name}' is not an entity`);\n }\n if (meta.processed) {\n return meta;\n }\n meta.processed = true;\n return fillRelations(meta);\n}\n\nfunction fillRelations<E>(meta: EntityMeta<E>): EntityMeta<E> {\n for (const relKey in meta.relations) {\n const relOpts = meta.relations[relKey];\n if (!relOpts) continue;\n\n if (relOpts.references) {\n // references were manually specified\n continue;\n }\n\n if (relOpts.mappedBy) {\n fillInverseSideRelations(relOpts);\n continue;\n }\n\n const relEntity = relOpts.entity!();\n const relMeta = ensureMeta(relEntity);\n\n if (relOpts.cardinality === 'mm') {\n const idKey = meta.id!;\n const relIdKey = relMeta.id!;\n const idName = meta.fields[idKey]?.name ?? idKey;\n const relIdName = relMeta.fields[relIdKey]?.name ?? relIdKey;\n const source = lowerFirst(meta.name ?? '') + upperFirst(idName);\n const target = lowerFirst(relMeta.name ?? '') + upperFirst(relIdName);\n relOpts.references = [\n { local: source, foreign: idKey },\n { local: target, foreign: relIdKey },\n ];\n } else {\n const relIdKey = relMeta.id;\n relOpts.references = [{ local: `${relKey}Id`, foreign: relIdKey }];\n }\n\n if (relOpts.through) {\n fillThroughRelations(relOpts.through());\n }\n }\n\n return meta;\n}\n\nfunction fillInverseSideRelations<E>(relOpts: RelationOptions<E>): void {\n const relEntity = relOpts.entity!();\n const relMeta = getMeta(relEntity);\n const mappedBy = getMappedByRelationKey(relOpts);\n relOpts.mappedBy = mappedBy;\n\n if (relMeta.fields[mappedBy]) {\n relOpts.references = [{ local: relMeta.id, foreign: mappedBy }];\n return;\n }\n\n const mappedByRelation = relMeta.relations[mappedBy];\n if (!mappedByRelation) return;\n\n if (relOpts.cardinality === 'm1' || relOpts.cardinality === 'mm') {\n relOpts.references = (mappedByRelation.references ?? []).slice().reverse();\n relOpts.through = mappedByRelation.through;\n return;\n }\n\n relOpts.references = (mappedByRelation.references ?? []).map(({ local, foreign }) => ({\n local: foreign,\n foreign: local,\n }));\n}\n\nfunction fillThroughRelations<E>(entity: Type<E>): void {\n const meta = ensureMeta(entity);\n meta.relations = getKeys(meta.fields).reduce<EntityMeta<E>['relations']>(\n (relations, key) => {\n const field = meta.fields[key];\n if (!field) return relations;\n if (field.references) {\n const relEntity = field.references();\n const relMeta = ensureMeta(relEntity);\n const relIdKey = relMeta.id;\n const relKey = key.slice(0, -relIdKey.length);\n const relOpts: RelationOptions = {\n entity: field.references,\n cardinality: 'm1',\n references: [{ local: key, foreign: relIdKey }],\n };\n (relations as Record<string, RelationOptions>)[relKey] = relOpts;\n }\n return relations;\n },\n {} as EntityMeta<E>['relations'],\n );\n}\n\nfunction getMappedByRelationKey<E>(relOpts: RelationOptions<E>): Key<E> {\n if (typeof relOpts.mappedBy === 'function') {\n const relEntity = relOpts.entity!();\n const relMeta = ensureMeta(relEntity);\n const keyMap = getRelationKeyMap(relMeta);\n return relOpts.mappedBy(keyMap);\n }\n return relOpts.mappedBy!;\n}\n\nfunction getRelationKeyMap<E>(meta: EntityMeta<E>): RelationKeyMap<E> {\n const keys = [...getKeys(meta.fields), ...getKeys(meta.relations)];\n return keys.reduce(\n (acc, key) => {\n (acc as Record<string, string>)[key] = key;\n return acc;\n },\n {} as RelationKeyMap<E>,\n );\n}\n\nfunction getIdKey<E>(meta: EntityMeta<E>): IdKey<E> {\n const id = getKeys(meta.fields).find((key) => meta.fields[key]?.isId);\n return id as IdKey<E>;\n}\n\nfunction extendMeta<E>(target: EntityMeta<E>, source: EntityMeta<E>): void {\n const sourceFields = { ...source.fields };\n const targetId = getIdKey(target);\n if (targetId) {\n const sourceId = getIdKey(source);\n if (sourceId) {\n delete sourceFields[sourceId];\n }\n }\n target.fields = { ...sourceFields, ...target.fields };\n target.relations = { ...source.relations, ...target.relations };\n\n // Merge hooks from parent entity (parent hooks execute first)\n if (source.hooks) {\n if (!target.hooks) target.hooks = {};\n for (const event of Object.keys(source.hooks) as HookEvent[]) {\n const sourceList = source.hooks[event];\n if (sourceList?.length) {\n target.hooks[event] = [...sourceList, ...(target.hooks[event] ?? [])];\n }\n }\n }\n}\n\nfunction inferType<E>(entity: Type<E>, key: string): FieldType {\n return Reflect.getMetadata('design:type', entity.prototype, key);\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: reflected type is unknown at compile time\nfunction inferEntityType<E>(entity: Type<E>, key: string): Type<any> {\n const inferredType = inferType(entity, key);\n const isValidType = isValidEntityType(inferredType);\n if (!isValidType) {\n throw TypeError(\n `'${entity.name}.${key}' type was auto-inferred with invalid type '${(inferredType as { name?: string })?.name}'`,\n );\n }\n return inferredType;\n}\n\nexport function isValidEntityType(type: unknown): type is Type<unknown> {\n return (\n typeof type === 'function' &&\n type !== Boolean &&\n type !== String &&\n type !== Number &&\n type !== BigInt &&\n type !== Date &&\n type !== Symbol\n );\n}\n","/**\n * SchemaAST Class\n *\n * The main class for working with schema graphs.\n * Provides graph operations like navigation, validation, and topological sorting.\n */\n\nimport type {\n ColumnNode,\n IndexNode,\n SchemaAST as ISchemaAST,\n RelationshipNode,\n RelationshipType,\n TableNode,\n ValidationError,\n} from './types.js';\n\n/**\n * Schema AST - A graph representation of a database schema.\n *\n * Enables:\n * - Graph navigation (dependencies, dependents)\n * - Circular dependency detection\n * - Topological sorting for correct DDL order\n * - Smart relation inference\n * - Schema validation\n */\nexport class SchemaAST implements ISchemaAST {\n readonly tables: Map<string, TableNode> = new Map();\n readonly relationships: RelationshipNode[] = [];\n readonly indexes: IndexNode[] = [];\n\n // ============================================================================\n // Table Operations\n // ============================================================================\n\n /**\n * Get a table by name.\n */\n getTable(name: string): TableNode | undefined {\n return this.tables.get(name);\n }\n\n /**\n * Add a table to the schema.\n */\n addTable(table: TableNode): void {\n table.schema = this;\n this.tables.set(table.name, table);\n }\n\n /**\n * Remove a table from the schema.\n */\n removeTable(name: string): boolean {\n const table = this.tables.get(name);\n if (!table) return false;\n\n // Remove all relationships involving this table\n for (let i = this.relationships.length - 1; i >= 0; i--) {\n const rel = this.relationships[i];\n if (rel.from.table === table || rel.to.table === table) {\n this.relationships.splice(i, 1);\n }\n }\n\n // Remove all indexes for this table\n for (let i = this.indexes.length - 1; i >= 0; i--) {\n if (this.indexes[i].table === table) {\n this.indexes.splice(i, 1);\n }\n }\n\n return this.tables.delete(name);\n }\n\n /**\n * Get all table nodes.\n */\n getTables(): TableNode[] {\n return Array.from(this.tables.values());\n }\n\n /**\n * Get all table names.\n */\n getTableNames(): string[] {\n return Array.from(this.tables.keys());\n }\n\n // ============================================================================\n // Graph Navigation\n // ============================================================================\n\n /**\n * Get all tables that depend on this table (have FKs pointing to it).\n * These are tables that reference this table's primary key.\n */\n getDependentTables(table: TableNode): TableNode[] {\n return table.incomingRelations.map((r) => r.from.table);\n }\n\n /**\n * Get all tables this table depends on (has FKs to).\n * These are tables that this table references.\n */\n getDependencies(table: TableNode): TableNode[] {\n return table.outgoingRelations.map((r) => r.to.table);\n }\n\n /**\n * Get the relationship between two tables (if any).\n */\n getRelationship(from: TableNode, to: TableNode): RelationshipNode | undefined {\n return this.relationships.find((r) => r.from.table === from && r.to.table === to);\n }\n\n /**\n * Get all relationships for a table.\n */\n getTableRelationships(table: TableNode): RelationshipNode[] {\n return this.relationships.filter((r) => r.from.table === table || r.to.table === table);\n }\n\n /**\n * Get the column that a foreign key column references.\n */\n getReferencedColumn(fkColumn: ColumnNode): ColumnNode | undefined {\n return fkColumn.references?.to.columns[0];\n }\n\n // ============================================================================\n // Graph Analysis\n // ============================================================================\n\n /**\n * Detect circular foreign key dependencies.\n * Returns arrays of tables that form cycles.\n */\n detectCircularDependencies(): TableNode[][] {\n const cycles: TableNode[][] = [];\n const visited = new Set<TableNode>();\n const stack = new Set<TableNode>();\n\n const dfs = (table: TableNode, path: TableNode[]): void => {\n if (stack.has(table)) {\n const cycleStart = path.indexOf(table);\n if (cycleStart !== -1) {\n cycles.push(path.slice(cycleStart));\n }\n return;\n }\n if (visited.has(table)) return;\n\n visited.add(table);\n stack.add(table);\n\n for (const dep of this.getDependencies(table)) {\n dfs(dep, [...path, table]);\n }\n\n stack.delete(table);\n };\n\n for (const table of this.tables.values()) {\n dfs(table, []);\n }\n\n return cycles;\n }\n\n /**\n * Check if there are any circular dependencies.\n */\n hasCircularDependencies(): boolean {\n return this.detectCircularDependencies().length > 0;\n }\n\n /**\n * Get tables in correct order for CREATE (dependencies first).\n * Tables with no dependencies come first, then tables that depend on them, etc.\n */\n getCreateOrder(): TableNode[] {\n return this.topologicalSort();\n }\n\n /**\n * Get tables in correct order for DROP (dependents first).\n * Tables that depend on others come first, then the tables they depend on.\n */\n getDropOrder(): TableNode[] {\n return this.topologicalSort().reverse();\n }\n\n /**\n * Topological sort respecting FK dependencies.\n * Uses Kahn's algorithm for stable ordering.\n */\n private topologicalSort(): TableNode[] {\n const result: TableNode[] = [];\n const visited = new Set<TableNode>();\n\n const visit = (table: TableNode): void => {\n if (visited.has(table)) return;\n visited.add(table);\n\n // Visit dependencies first (tables this table references)\n for (const dep of this.getDependencies(table)) {\n visit(dep);\n }\n\n result.push(table);\n };\n\n // Visit all tables\n for (const table of this.tables.values()) {\n visit(table);\n }\n\n return result;\n }\n\n // ============================================================================\n // Validation\n // ============================================================================\n\n /**\n * Validate schema integrity.\n * Checks for:\n * - Missing FK targets\n * - Circular dependencies\n * - Orphan columns\n * - Duplicate indexes\n */\n validate(): ValidationError[] {\n const errors: ValidationError[] = [];\n\n // Check all FK targets exist\n for (const rel of this.relationships) {\n if (!this.tables.has(rel.to.table.name)) {\n errors.push({\n type: 'missing_fk_target',\n message: `FK target table \"${rel.to.table.name}\" does not exist`,\n relationship: rel,\n });\n }\n }\n\n // Check for circular dependencies\n const cycles = this.detectCircularDependencies();\n for (const cycle of cycles) {\n errors.push({\n type: 'circular_dependency',\n message: `Circular FK: ${cycle.map((t) => t.name).join(' -> ')}`,\n tables: cycle,\n });\n }\n\n // Check for duplicate index names within same table\n for (const table of this.tables.values()) {\n const indexNames = new Set<string>();\n for (const index of table.indexes) {\n if (indexNames.has(index.name)) {\n errors.push({\n type: 'duplicate_index',\n message: `Duplicate index name \"${index.name}\" in table \"${table.name}\"`,\n table,\n });\n }\n indexNames.add(index.name);\n }\n }\n\n return errors;\n }\n\n /**\n * Check if the schema is valid (no validation errors).\n */\n isValid(): boolean {\n return this.validate().length === 0;\n }\n\n // ============================================================================\n // Smart Relation Detection\n // ============================================================================\n\n /**\n * Check if a table looks like a junction table (ManyToMany through).\n * Junction tables typically have:\n * - Exactly 2 foreign keys\n * - Few other columns (id, maybe timestamps)\n * - Primary key might be composite of the FKs\n */\n isJunctionTable(table: TableNode): boolean {\n const fkCount = table.outgoingRelations.length;\n const columnCount = table.columns.size;\n\n // Must have exactly 2 FKs\n if (fkCount !== 2) {\n return false;\n }\n\n // Should have few columns (typically: id + 2 FKs + maybe timestamps)\n if (columnCount > 6) {\n return false;\n }\n\n // Check if name suggests a junction (contains both related table names)\n const relatedTables = table.outgoingRelations.map((r) => r.to.table.name.toLowerCase());\n const tableName = table.name.toLowerCase();\n\n // Common patterns: user_roles, post_tags, etc.\n const containsBothNames = relatedTables.every(\n (name) => tableName.includes(name.replace(/s$/, '')) || tableName.includes(name),\n );\n\n return containsBothNames || columnCount <= 5;\n }\n\n /**\n * Infer relation type from schema structure.\n */\n inferRelationType(rel: RelationshipNode): RelationshipType {\n const fromCol = rel.from.columns[0];\n\n // Check if source is junction table -> ManyToMany\n if (this.isJunctionTable(rel.from.table)) {\n return 'ManyToMany';\n }\n\n // Unique FK -> OneToOne\n if (fromCol?.isUnique) {\n return 'OneToOne';\n }\n\n // Default: ManyToOne (many rows can reference same target)\n return 'ManyToOne';\n }\n\n /**\n * Get the inverse relation type.\n */\n getInverseRelationType(type: RelationshipType): RelationshipType {\n switch (type) {\n case 'OneToOne':\n return 'OneToOne';\n case 'OneToMany':\n return 'ManyToOne';\n case 'ManyToOne':\n return 'OneToMany';\n case 'ManyToMany':\n return 'ManyToMany';\n }\n }\n\n // ============================================================================\n // Index Operations\n // ============================================================================\n\n /**\n * Add an index to the schema.\n */\n addIndex(index: IndexNode): void {\n this.indexes.push(index);\n if (!index.table.indexes.includes(index)) {\n index.table.indexes.push(index);\n }\n }\n\n /**\n * Get all indexes for a table.\n */\n getTableIndexes(tableName: string): IndexNode[] {\n const table = this.tables.get(tableName);\n return table?.indexes ?? [];\n }\n\n /**\n * Find an index by name.\n */\n getIndex(name: string): IndexNode | undefined {\n return this.indexes.find((i) => i.name === name);\n }\n\n // ============================================================================\n // Relationship Operations\n // ============================================================================\n\n /**\n * Add a relationship to the schema.\n */\n addRelationship(rel: RelationshipNode): void {\n this.relationships.push(rel);\n\n // Update table links\n rel.from.table.outgoingRelations.push(rel);\n rel.to.table.incomingRelations.push(rel);\n\n // Update column links\n for (const col of rel.from.columns) {\n col.references = rel;\n }\n for (const col of rel.to.columns) {\n col.referencedBy.push(rel);\n }\n }\n\n /**\n * Remove a relationship from the schema.\n */\n removeRelationship(name: string): boolean {\n const index = this.relationships.findIndex((r) => r.name === name);\n if (index === -1) return false;\n\n const rel = this.relationships[index];\n\n // Remove from table links\n const fromIdx = rel.from.table.outgoingRelations.indexOf(rel);\n if (fromIdx !== -1) rel.from.table.outgoingRelations.splice(fromIdx, 1);\n\n const toIdx = rel.to.table.incomingRelations.indexOf(rel);\n if (toIdx !== -1) rel.to.table.incomingRelations.splice(toIdx, 1);\n\n // Remove from column links\n for (const col of rel.from.columns) {\n if (col.references === rel) {\n col.references = undefined;\n }\n }\n for (const col of rel.to.columns) {\n const refIdx = col.referencedBy.indexOf(rel);\n if (refIdx !== -1) col.referencedBy.splice(refIdx, 1);\n }\n\n this.relationships.splice(index, 1);\n return true;\n }\n\n // ============================================================================\n // Utility Methods\n // ============================================================================\n\n /**\n * Create a deep clone of this schema.\n */\n clone(): SchemaAST {\n const clone = new SchemaAST();\n\n // First pass: clone tables and columns (without links)\n for (const [name, table] of this.tables) {\n const clonedColumns = new Map<string, ColumnNode>();\n\n for (const [colName, col] of table.columns) {\n const clonedCol: ColumnNode = {\n ...col,\n table: undefined as unknown as TableNode, // Will be set below\n referencedBy: [],\n references: undefined,\n };\n clonedColumns.set(colName, clonedCol);\n }\n\n const clonedTable: TableNode = {\n name,\n columns: clonedColumns,\n primaryKey: [],\n indexes: [],\n comment: table.comment,\n schema: clone,\n incomingRelations: [],\n outgoingRelations: [],\n };\n\n // Link columns to table\n for (const col of clonedColumns.values()) {\n (col as { table: TableNode }).table = clonedTable;\n }\n\n // Set primary key\n (clonedTable as { primaryKey: ColumnNode[] }).primaryKey = table.primaryKey\n .map((pk) => clonedColumns.get(pk.name))\n .filter(Boolean) as ColumnNode[];\n\n clone.tables.set(name, clonedTable);\n }\n\n // Second pass: clone relationships\n for (const rel of this.relationships) {\n const fromTable = clone.tables.get(rel.from.table.name);\n const toTable = clone.tables.get(rel.to.table.name);\n\n if (!fromTable || !toTable) continue;\n\n const fromColumns = rel.from.columns\n .map((c) => fromTable.columns.get(c.name))\n .filter((c): c is ColumnNode => c !== undefined);\n const toColumns = rel.to.columns\n .map((c) => toTable.columns.get(c.name))\n .filter((c): c is ColumnNode => c !== undefined);\n\n const clonedRel: RelationshipNode = {\n ...rel,\n from: {\n table: fromTable,\n columns: fromColumns,\n },\n to: {\n table: toTable,\n columns: toColumns,\n },\n through: rel.through ? clone.tables.get(rel.through.name) : undefined,\n };\n\n clone.addRelationship(clonedRel);\n }\n\n // Third pass: clone indexes\n for (const idx of this.indexes) {\n const table = clone.tables.get(idx.table.name);\n if (!table) continue;\n\n const columns = idx.columns.map((c) => table.columns.get(c.name)).filter((c): c is ColumnNode => c !== undefined);\n\n const clonedIdx: IndexNode = {\n ...idx,\n table,\n columns,\n };\n clone.addIndex(clonedIdx);\n }\n\n return clone;\n }\n\n /**\n * Get statistics about the schema.\n */\n getStats(): {\n tableCount: number;\n columnCount: number;\n relationshipCount: number;\n indexCount: number;\n } {\n let columnCount = 0;\n for (const table of this.tables.values()) {\n columnCount += table.columns.size;\n }\n\n return {\n tableCount: this.tables.size,\n columnCount,\n relationshipCount: this.relationships.length,\n indexCount: this.indexes.length,\n };\n }\n\n /**\n * Convert schema to a plain object for serialization/debugging.\n */\n toJSON(): object {\n return {\n tables: Array.from(this.tables.values()).map((t) => ({\n name: t.name,\n columns: Array.from(t.columns.values()).map((c) => ({\n name: c.name,\n type: c.type,\n nullable: c.nullable,\n isPrimaryKey: c.isPrimaryKey,\n isAutoIncrement: c.isAutoIncrement,\n isUnique: c.isUnique,\n })),\n indexes: t.indexes.map((i) => ({\n name: i.name,\n columns: i.columns.map((c) => c.name),\n unique: i.unique,\n })),\n })),\n relationships: this.relationships.map((r) => ({\n name: r.name,\n type: r.type,\n from: `${r.from.table.name}.${r.from.columns.map((c) => c.name).join(',')}`,\n to: `${r.to.table.name}.${r.to.columns.map((c) => c.name).join(',')}`,\n onDelete: r.onDelete,\n onUpdate: r.onUpdate,\n })),\n };\n }\n}\n","/**\n * Schema AST Types\n *\n * A unified graph representation of database schema with relationships as first-class citizens.\n * Enables reliable diffing, smart relation detection, and dialect-agnostic schema operations.\n */\n\nimport type { VectorIndexOptions } from '../type/entity.js';\n\n// ============================================================================\n// Canonical Type System\n// ============================================================================\n\n/**\n * Type categories universal across SQL dialects.\n * These represent logical/semantic types, not specific SQL types.\n */\nexport type TypeCategory =\n | 'integer'\n | 'float'\n | 'decimal'\n | 'string'\n | 'boolean'\n | 'date'\n | 'time'\n | 'timestamp'\n | 'json'\n | 'uuid'\n | 'blob'\n | 'vector'\n | 'halfvec'\n | 'sparsevec';\n\n/**\n * Size variants for types that support different sizes.\n */\nexport type SizeVariant = 'tiny' | 'small' | 'medium' | 'big';\n\n/**\n * Dialect-agnostic type representation.\n * Used for comparing types across different database engines.\n */\nexport interface CanonicalType {\n /** The semantic category of the type */\n readonly category: TypeCategory;\n /** Size variant for types with multiple sizes (tinyint, smallint, bigint, etc.) */\n readonly size?: SizeVariant;\n /** Character/string length (e.g., VARCHAR(255)) */\n readonly length?: number;\n /** Numeric precision for decimal types */\n readonly precision?: number;\n /** Numeric scale for decimal types */\n readonly scale?: number;\n /** Whether the numeric type is unsigned */\n readonly unsigned?: boolean;\n /** Pass-through for explicit/raw SQL types */\n readonly raw?: string;\n /** Whether this type has timezone info (for timestamp types) */\n readonly withTimezone?: boolean;\n}\n\n// ============================================================================\n// Foreign Key Actions\n// ============================================================================\n\n/**\n * Actions for foreign key ON DELETE and ON UPDATE clauses.\n */\nexport type ForeignKeyAction = 'CASCADE' | 'SET NULL' | 'SET DEFAULT' | 'RESTRICT' | 'NO ACTION';\n\n/**\n * Default action for foreign key ON DELETE and ON UPDATE clauses.\n */\nexport const DEFAULT_FOREIGN_KEY_ACTION: ForeignKeyAction = 'NO ACTION';\n\n// ============================================================================\n// Relationship Types\n// ============================================================================\n\n/**\n * Relationship cardinality types.\n */\nexport type RelationshipType = 'OneToOne' | 'OneToMany' | 'ManyToOne' | 'ManyToMany';\n\n/**\n * Source of how a relationship was detected.\n */\nexport type RelationshipSource =\n | 'explicit_fk' // From actual FK constraint\n | 'entity_decorator' // From @Relation decorator\n | 'naming_pattern' // Inferred from column naming (user_id -> users)\n | 'junction_table' // Inferred from junction table structure\n | 'unique_fk'; // Inferred from unique FK (OneToOne)\n\n// ============================================================================\n// Index Types\n// ============================================================================\n\n/**\n * Index algorithm/type supported by various databases.\n */\nexport type IndexType =\n | 'btree'\n | 'hash'\n | 'gin'\n | 'gist'\n | 'brin'\n | 'fulltext'\n | 'hnsw'\n | 'ivfflat'\n | 'vector'\n | 'vectorSearch';\n\n/**\n * Source of where an index was defined.\n */\nexport type IndexSource = 'entity' | 'database' | 'both';\n\n/**\n * Sync status for indexes.\n */\nexport type IndexSyncStatus = 'in_sync' | 'entity_only' | 'db_only' | 'mismatch';\n\n// ============================================================================\n// Schema AST Nodes\n// ============================================================================\n\n/**\n * Column node in the schema graph.\n * Represents a single column in a database table.\n */\nexport interface ColumnNode {\n /** Column name in the database */\n readonly name: string;\n /** Canonical (dialect-agnostic) type */\n readonly type: CanonicalType;\n /** Whether the column allows NULL values */\n readonly nullable: boolean;\n /** Default value expression or literal */\n readonly defaultValue?: unknown;\n /** Whether this column is part of the primary key */\n readonly isPrimaryKey: boolean;\n /** Whether this column auto-increments */\n readonly isAutoIncrement: boolean;\n /** Whether this column has a unique constraint */\n readonly isUnique: boolean;\n /** Column comment/description */\n readonly comment?: string;\n\n // === Graph Links ===\n /** Reference to the parent table */\n table: TableNode;\n /** Relationships where this column is referenced (FKs pointing TO this column) */\n referencedBy: RelationshipNode[];\n /** Relationship where this column is the foreign key (FK this column points FROM) */\n references?: RelationshipNode;\n}\n\n/**\n * Table node in the schema graph.\n * Represents a database table with all its columns, indexes, and relationships.\n */\nexport interface TableNode {\n /** Table name in the database */\n readonly name: string;\n /** Map of column name to column node */\n readonly columns: Map<string, ColumnNode>;\n /** Primary key columns (supports composite keys) */\n readonly primaryKey: ColumnNode[];\n /** Indexes on this table */\n readonly indexes: IndexNode[];\n /** Optional table comment */\n readonly comment?: string;\n\n // === Graph Links ===\n /** Reference to the parent schema */\n schema: SchemaAST;\n /** Relationships pointing TO this table (other tables referencing this one) */\n incomingRelations: RelationshipNode[];\n /** Relationships pointing FROM this table (this table referencing others) */\n outgoingRelations: RelationshipNode[];\n}\n\n/**\n * Relationship node - a first-class citizen in the schema graph.\n * Represents a foreign key relationship between tables.\n */\nexport interface RelationshipNode {\n /** Constraint name (e.g., fk_posts_author_id) */\n readonly name: string;\n /** Type of relationship */\n readonly type: RelationshipType;\n\n /** Source side of the relationship (table with the FK column) */\n readonly from: {\n readonly table: TableNode;\n readonly columns: ColumnNode[];\n };\n\n /** Target side of the relationship (referenced table) */\n readonly to: {\n readonly table: TableNode;\n readonly columns: ColumnNode[];\n };\n\n /** Junction table for ManyToMany relationships */\n readonly through?: TableNode;\n\n /** Action on delete of referenced row */\n readonly onDelete?: ForeignKeyAction;\n /** Action on update of referenced row */\n readonly onUpdate?: ForeignKeyAction;\n\n // === Metadata for Smart Detection ===\n /** Confidence level (0-1) for inferred relationships */\n readonly confidence?: number;\n /** How this relationship was detected */\n readonly inferredFrom?: RelationshipSource;\n}\n\n/**\n * Index node in the schema graph.\n * Represents a database index on one or more columns.\n */\nexport type IndexNode = {\n /** Index name */\n readonly name: string;\n /** Reference to the table this index belongs to */\n readonly table: TableNode;\n /** Columns included in the index (order matters) */\n readonly columns: ColumnNode[];\n /** Whether this is a unique index */\n readonly unique: boolean;\n /** Index algorithm/type */\n readonly type?: IndexType;\n /** Partial index condition (WHERE clause) */\n readonly where?: string;\n\n // === Sync Metadata ===\n /** Where this index was defined */\n readonly source?: IndexSource;\n /** Current sync status */\n readonly syncStatus?: IndexSyncStatus;\n} & VectorIndexOptions;\n\n/**\n * Root of the schema graph.\n * Contains all tables, relationships, and provides graph operations.\n */\nexport interface SchemaAST {\n /** Map of table name to table node */\n readonly tables: Map<string, TableNode>;\n /** All relationships in the schema */\n readonly relationships: RelationshipNode[];\n /** All indexes (also accessible via TableNode.indexes) */\n readonly indexes: IndexNode[];\n}\n\n// ============================================================================\n// Schema Diff Types\n// ============================================================================\n\n/**\n * Difference between two column definitions.\n */\nexport interface ColumnDiff {\n readonly table: string;\n readonly column: string;\n readonly type: 'add' | 'drop' | 'alter';\n readonly expected?: ColumnNode;\n readonly actual?: ColumnNode;\n /** Whether this change could cause data loss */\n readonly isBreaking?: boolean;\n /** Human-readable description of the change */\n readonly description?: string;\n}\n\n/**\n * Difference between two table definitions.\n */\nexport interface TableDiff {\n readonly name: string;\n readonly type: 'create' | 'drop' | 'alter';\n readonly columnDiffs?: ColumnDiff[];\n readonly indexDiffs?: IndexDiff[];\n}\n\n/**\n * Difference between two index definitions.\n */\nexport interface IndexDiff {\n readonly name: string;\n readonly table: string;\n readonly type: 'create' | 'drop' | 'alter';\n readonly expected?: IndexNode;\n readonly actual?: IndexNode;\n}\n\n/**\n * Difference between two relationship definitions.\n */\nexport interface RelationshipDiff {\n readonly name: string;\n readonly fromTable: string;\n readonly toTable: string;\n readonly type: 'create' | 'drop' | 'alter';\n readonly expected?: RelationshipNode;\n readonly actual?: RelationshipNode;\n}\n\n/**\n * Complete diff between two schemas.\n */\nexport interface SchemaDiffResult {\n /** Tables that need to be created */\n readonly tablesToCreate: TableNode[];\n /** Tables that need to be dropped */\n readonly tablesToDrop: TableNode[];\n /** Tables that need alterations */\n readonly tablesToAlter: TableDiff[];\n\n /** All column-level diffs */\n readonly columnDiffs: ColumnDiff[];\n /** All index diffs */\n readonly indexDiffs: IndexDiff[];\n /** All relationship/FK diffs */\n readonly relationshipDiffs: RelationshipDiff[];\n\n /** Whether there are any differences */\n readonly hasDifferences: boolean;\n /** Whether any changes are breaking (could cause data loss) */\n readonly hasBreakingChanges: boolean;\n}\n\n// ============================================================================\n// Validation Types\n// ============================================================================\n\n/**\n * Type of schema validation error.\n */\nexport type ValidationErrorType =\n | 'missing_fk_target'\n | 'circular_dependency'\n | 'orphan_column'\n | 'duplicate_index'\n | 'invalid_type';\n\n/**\n * Schema validation error.\n */\nexport interface ValidationError {\n readonly type: ValidationErrorType;\n readonly message: string;\n readonly table?: TableNode;\n readonly column?: ColumnNode;\n readonly relationship?: RelationshipNode;\n readonly tables?: TableNode[];\n}\n\n// ============================================================================\n// Smart Relation Detection Types\n// ============================================================================\n\n/**\n * A detected/inferred relationship with confidence score.\n */\nexport interface DetectedRelation {\n readonly type: RelationshipType;\n readonly from: {\n readonly table: TableNode;\n readonly columns: ColumnNode[];\n };\n readonly to: {\n readonly table: TableNode;\n readonly columns: ColumnNode[];\n };\n readonly through?: TableNode;\n /** Confidence level (0-1) */\n readonly confidence: number;\n /** How this relation was detected */\n readonly source: RelationshipSource;\n /** Suggested constraint name */\n readonly suggestedName?: string;\n}\n\n// ============================================================================\n// Drift Detection Types\n// ============================================================================\n\n/**\n * Severity level for schema drift issues.\n */\nexport type DriftSeverity = 'critical' | 'warning' | 'info';\n\n/**\n * Type of schema drift.\n */\nexport type DriftType =\n | 'missing_table'\n | 'unexpected_table'\n | 'missing_column'\n | 'unexpected_column'\n | 'type_mismatch'\n | 'constraint_mismatch'\n | 'missing_index'\n | 'unexpected_index'\n | 'missing_relationship'\n | 'unexpected_relationship';\n\n/**\n * A single schema drift issue.\n */\nexport interface Drift {\n readonly type: DriftType;\n readonly severity: DriftSeverity;\n readonly table?: string;\n readonly column?: string;\n readonly index?: string;\n readonly relationship?: string;\n readonly expected?: unknown;\n readonly actual?: unknown;\n readonly details: string;\n readonly suggestion: string;\n}\n\n/**\n * Overall drift status.\n */\nexport type DriftStatus = 'in_sync' | 'drifted' | 'critical';\n\n/**\n * Complete drift detection report.\n */\nexport interface DriftReport {\n readonly status: DriftStatus;\n readonly drifts: Drift[];\n readonly generatedAt: Date;\n /** Count by severity */\n readonly summary: {\n readonly critical: number;\n readonly warning: number;\n readonly info: number;\n };\n}\n\n// ============================================================================\n// Sync Direction Types\n// ============================================================================\n\n/**\n * Direction for schema synchronization.\n */\nexport type SyncDirection =\n | 'bidirectional' // Sync both ways (default for development)\n | 'entity-to-db' // Entities are source of truth → push to DB\n | 'db-to-entity'; // Database is source of truth → pull to entities\n\n/**\n * Strategy for resolving conflicts in bidirectional sync.\n */\nexport type ConflictResolution =\n | 'prompt' // Ask user interactively\n | 'entity-wins' // Entity definition takes precedence\n | 'db-wins' // Database definition takes precedence\n | 'skip'; // Skip conflicting changes\n\n/**\n * Options for sync operations.\n */\nexport interface SyncOptions {\n /** Direction of synchronization */\n readonly direction?: SyncDirection;\n /** How to resolve conflicts (for bidirectional) */\n readonly conflictResolution?: ConflictResolution;\n /** Prevent destructive changes (DROP, type narrowing) */\n readonly safe?: boolean;\n /** Include indexes in sync */\n readonly includeIndexes?: boolean;\n /** Include foreign keys in sync */\n readonly includeForeignKeys?: boolean;\n /** Dry run - report changes without applying */\n readonly dryRun?: boolean;\n}\n","/**\n * SchemaAST Builder\n *\n * Constructs a SchemaAST from:\n * - Entity metadata (decorator-based entities)\n * - Database introspection results (TableSchema[])\n */\n\nimport { getMeta } from '../entity/metadata/definition.js';\nimport type { EntityMeta, FieldOptions, RelationOptions, Type } from '../type/index.js';\nimport type { NamingStrategy } from '../type/namingStrategy.js';\nimport { fieldOptionsToCanonical } from './canonicalType.js';\nimport { SchemaAST } from './schemaAST.js';\nimport type { ColumnNode, ForeignKeyAction, IndexNode, RelationshipNode, TableNode } from './types.js';\nimport { DEFAULT_FOREIGN_KEY_ACTION } from './types.js';\n\n/**\n * Options for building SchemaAST from entities.\n */\nexport interface BuildFromEntitiesOptions {\n /** Custom table name resolver */\n resolveTableName?: (entity: Type<unknown>, meta: EntityMeta<unknown>) => string;\n /** Custom column name resolver */\n resolveColumnName?: (key: string, field: FieldOptions) => string;\n /** Naming strategy to use */\n namingStrategy?: NamingStrategy;\n /** Default action for foreign key ON DELETE and ON UPDATE clauses */\n defaultForeignKeyAction?: ForeignKeyAction;\n}\n\n/**\n * Builds SchemaAST instances from various sources.\n */\nexport class SchemaASTBuilder {\n private ast: SchemaAST;\n\n constructor(\n private readonly namingStrategy?: NamingStrategy,\n private readonly defaultForeignKeyAction: ForeignKeyAction = DEFAULT_FOREIGN_KEY_ACTION,\n ) {\n this.ast = new SchemaAST();\n }\n\n /**\n * Reset the builder for a new schema.\n */\n reset(): this {\n this.ast = new SchemaAST();\n return this;\n }\n\n /**\n * Get the built AST.\n */\n getAST(): SchemaAST {\n return this.ast;\n }\n\n // ============================================================================\n // Build from Entities\n // ============================================================================\n\n /**\n * Build AST from entity classes (decorated with @Entity, @Field, etc.)\n */\n fromEntities(entities: Type<unknown>[], options: BuildFromEntitiesOptions = {}): SchemaAST {\n this.reset();\n\n const namingStrategy = options.namingStrategy ?? this.namingStrategy;\n const resolveTableName =\n options.resolveTableName ?? ((e, m) => namingStrategy?.tableName(m.name ?? e.name) ?? m.name ?? e.name);\n const resolveColumnName =\n options.resolveColumnName ?? ((k, f) => namingStrategy?.columnName(f.name ?? k) ?? f.name ?? k);\n\n // First pass: create all tables and columns\n for (const entity of entities) {\n const meta = getMeta(entity);\n this.addTableFromEntity(entity, meta, resolveTableName, resolveColumnName);\n }\n\n // Second pass: create relationships from relation decorators\n for (const entity of entities) {\n const meta = getMeta(entity);\n this.addRelationshipsFromEntity(entity, meta, resolveTableName, resolveColumnName, options);\n }\n\n // Third pass: create indexes from field options\n for (const entity of entities) {\n const meta = getMeta(entity);\n this.addIndexesFromEntity(entity, meta, resolveTableName, resolveColumnName);\n }\n\n return this.ast;\n }\n\n /**\n * Add a table from entity metadata.\n */\n private addTableFromEntity(\n entity: Type<unknown>,\n meta: EntityMeta<unknown>,\n resolveTableName: (entity: Type<unknown>, meta: EntityMeta<unknown>) => string,\n resolveColumnName: (key: string, field: FieldOptions) => string,\n ): void {\n const tableName = resolveTableName(entity, meta);\n\n const columns = new Map<string, ColumnNode>();\n const primaryKey: ColumnNode[] = [];\n\n // Create placeholder table (will be fully initialized below)\n const table: TableNode = {\n name: tableName,\n columns,\n primaryKey,\n indexes: [],\n schema: this.ast,\n incomingRelations: [],\n outgoingRelations: [],\n };\n\n // Add columns from fields\n const fields = meta.fields as Record<string, FieldOptions | undefined>;\n for (const key of Object.keys(fields)) {\n const field = fields[key];\n if (!field) continue;\n\n // Skip virtual fields\n if (field.virtual) continue;\n\n const columnName = resolveColumnName(key, field);\n const type = fieldOptionsToCanonical(field, field.type);\n\n const column: ColumnNode = {\n name: columnName,\n type,\n nullable: field.nullable ?? true,\n defaultValue: field.defaultValue,\n isPrimaryKey: key === meta.id,\n isAutoIncrement: field.autoIncrement ?? (key === meta.id && type.category === 'integer'),\n isUnique: field.unique ?? false,\n comment: field.comment,\n table,\n referencedBy: [],\n references: undefined,\n };\n\n columns.set(columnName, column);\n\n if (key === meta.id) {\n primaryKey.push(column);\n }\n }\n\n this.ast.addTable(table);\n }\n\n /**\n * Add relationships from entity relation decorators.\n */\n private addRelationshipsFromEntity(\n entity: Type<unknown>,\n meta: EntityMeta<unknown>,\n resolveTableName: (entity: Type<unknown>, meta: EntityMeta<unknown>) => string,\n resolveColumnName: (key: string, field: FieldOptions) => string,\n options: BuildFromEntitiesOptions,\n ): void {\n const tableName = resolveTableName(entity, meta);\n const table = this.ast.getTable(tableName);\n if (!table) return;\n\n const relations = meta.relations as Record<string, RelationOptions | undefined>;\n for (const key of Object.keys(relations)) {\n const relation = relations[key];\n if (!relation?.entity) continue;\n\n const relatedEntity = relation.entity();\n const relatedMeta = getMeta(relatedEntity);\n const relatedTableName = resolveTableName(relatedEntity, relatedMeta);\n const relatedTable = this.ast.getTable(relatedTableName);\n if (!relatedTable) continue;\n\n // Only create FK for owning side (m1 and owner side of 11)\n if (relation.cardinality === 'm1' || (relation.cardinality === '11' && relation.references)) {\n const references = relation.references ?? [{ local: `${key}Id`, foreign: relatedMeta.id as string }];\n const localPropName = references[0].local;\n const foreignPropName = references[0].foreign;\n\n const localField = meta.fields[localPropName];\n if (!localField) continue;\n\n const localColName = resolveColumnName(localPropName, localField);\n const foreignField = relatedMeta.fields[foreignPropName];\n if (!foreignField) continue;\n\n const foreignColName = resolveColumnName(foreignPropName, foreignField);\n\n const localColumn = table.columns.get(localColName);\n const foreignColumn = relatedTable.columns.get(foreignColName);\n\n if (localColumn && foreignColumn) {\n const relNode: RelationshipNode = {\n name: `fk_${tableName}_${localColName}`,\n type: relation.cardinality === 'm1' ? 'ManyToOne' : 'OneToOne',\n from: { table, columns: [localColumn] },\n to: { table: relatedTable, columns: [foreignColumn] },\n onDelete: options.defaultForeignKeyAction ?? this.defaultForeignKeyAction,\n onUpdate: options.defaultForeignKeyAction ?? this.defaultForeignKeyAction,\n confidence: 1.0,\n inferredFrom: 'entity_decorator',\n };\n\n this.ast.addRelationship(relNode);\n }\n }\n }\n }\n\n /**\n * Add indexes from field options.\n */\n private addIndexesFromEntity(\n entity: Type<unknown>,\n meta: EntityMeta<unknown>,\n resolveTableName: (entity: Type<unknown>, meta: EntityMeta<unknown>) => string,\n resolveColumnName: (key: string, field: FieldOptions) => string,\n ): void {\n const tableName = resolveTableName(entity, meta);\n const table = this.ast.getTable(tableName);\n if (!table) return;\n\n // 1. Single column indexes from @Field({ index: true })\n const indexFields = meta.fields as Record<string, FieldOptions | undefined>;\n for (const key of Object.keys(indexFields)) {\n const field = indexFields[key];\n if (!field?.index) continue;\n\n const columnName = resolveColumnName(key, field);\n const column = table.columns.get(columnName);\n if (!column) continue;\n\n const indexName = typeof field.index === 'string' ? field.index : `idx_${tableName}_${columnName}`;\n\n const indexNode: IndexNode = {\n name: indexName,\n table,\n columns: [column],\n unique: field.unique ?? false,\n source: 'entity',\n syncStatus: 'entity_only',\n };\n\n this.ast.addIndex(indexNode);\n }\n\n // 2. Composite indexes from @Index([...])\n if (meta.indexes) {\n for (const idxMeta of meta.indexes) {\n const columns: ColumnNode[] = [];\n for (const propName of idxMeta.columns) {\n const field = meta.fields[propName as keyof typeof meta.fields];\n if (!field) continue;\n const colName = resolveColumnName(propName, field);\n const column = table.columns.get(colName);\n if (column) {\n columns.push(column);\n }\n }\n\n if (columns.length > 0) {\n const indexName = idxMeta.name ?? `idx_${tableName}_${columns.map((c) => c.name).join('_')}`;\n const indexNode: IndexNode = {\n name: indexName,\n table,\n columns,\n unique: idxMeta.unique ?? false,\n type: idxMeta.type,\n where: idxMeta.where,\n distance: idxMeta.distance,\n m: idxMeta.m,\n efConstruction: idxMeta.efConstruction,\n lists: idxMeta.lists,\n source: 'entity',\n syncStatus: 'entity_only',\n };\n this.ast.addIndex(indexNode);\n }\n }\n }\n }\n}\n","import { type AbstractDialect, AbstractSqlDialect } from '../dialect/index.js';\nimport { getMeta } from '../entity/index.js';\nimport {\n areTypesEqual,\n canonicalToSql,\n fieldOptionsToCanonical,\n isVectorCategory,\n sqlToCanonical,\n} from '../schema/canonicalType.js';\nimport { SchemaASTBuilder } from '../schema/schemaASTBuilder.js';\nimport type {\n CanonicalType,\n ColumnNode,\n ForeignKeyAction,\n IndexNode,\n RelationshipNode,\n TableNode,\n} from '../schema/types.js';\nimport type {\n ColumnSchema,\n DialectFeatures,\n EntityMeta,\n FieldKey,\n FieldOptions,\n IndexSchema,\n NamingStrategy,\n SchemaDiff,\n SchemaGenerator,\n Type,\n VectorDistance,\n} from '../type/index.js';\nimport { escapeSqlId, getKeys, isAutoIncrement } from '../util/index.js';\nimport { formatDefaultValue } from './builder/expressions.js';\nimport type { FullColumnDefinition, TableDefinition, TableForeignKeyDefinition } from './builder/types.js';\n\n/** Maps UQL distance metric names to inline DDL keywords (e.g. MariaDB `DISTANCE=euclidean`). */\nconst INLINE_VECTOR_DISTANCE_MAP: Partial<Record<VectorDistance, string>> = { cosine: 'cosine', l2: 'euclidean' };\n\n/**\n * Unified SQL schema generator.\n * Parameterized by dialect to handle Postgres, MySQL, MariaDB, and SQLite.\n */\nexport class SqlSchemaGenerator implements SchemaGenerator {\n constructor(\n protected readonly dialect: AbstractSqlDialect,\n protected readonly defaultForeignKeyAction: ForeignKeyAction = 'NO ACTION',\n ) {}\n\n get namingStrategy(): NamingStrategy | undefined {\n return this.dialect.namingStrategy;\n }\n\n get features(): DialectFeatures {\n return this.dialect.features;\n }\n\n resolveTableName<E>(entity: Type<E>, meta: EntityMeta<E>): string {\n return this.dialect.resolveTableName(entity, meta);\n }\n\n resolveColumnName(key: string, field: FieldOptions): string {\n return this.dialect.resolveColumnName(key, field);\n }\n\n /**\n * Escape an identifier (table name, column name, etc.)\n */\n protected escapeId(identifier: string): string {\n return escapeSqlId(identifier, this.dialect.quoteChar);\n }\n\n /**\n * Primary key type for auto-increment integer IDs\n */\n protected get serialPrimaryKeyType(): string {\n return this.dialect.serialPrimaryKey;\n }\n\n // ============================================================================\n // CanonicalType Integration (Unified Type System)\n // ============================================================================\n\n /**\n * Convert FieldOptions to CanonicalType using the unified type system.\n */\n protected getCanonicalType(field: FieldOptions, fieldType?: unknown): CanonicalType {\n return fieldOptionsToCanonical(field, fieldType);\n }\n\n /**\n * Convert CanonicalType to SQL type string for this dialect.\n * Also handles legacy string types for backward compatibility.\n */\n protected canonicalTypeToSql(type: CanonicalType | string): string {\n // Handle legacy string types\n if (typeof type === 'string') {\n return type;\n }\n return canonicalToSql(type, this.dialect);\n }\n\n // ============================================================================\n // SchemaGenerator Implementation\n // ============================================================================\n\n generateCreateTable<E>(entity: Type<E>, options: { ifNotExists?: boolean } = {}): string[] {\n const builder = new SchemaASTBuilder(this.dialect.namingStrategy);\n const ast = builder.fromEntities([entity]);\n const tableNode = ast.getTables()[0];\n return this.generateCreateTableFromNode(tableNode, options);\n }\n\n generateDropTable<E>(entity: Type<E>): string {\n const meta = getMeta(entity);\n const tableName = this.dialect.resolveTableName(entity, meta);\n return `DROP TABLE IF EXISTS ${this.escapeId(tableName)};`;\n }\n\n generateAlterTable(diff: SchemaDiff): string[] {\n const statements: string[] = [];\n const tableName = this.escapeId(diff.tableName);\n\n // Add new columns\n if (diff.columnsToAdd?.length) {\n for (const column of diff.columnsToAdd) {\n const colDef = this.generateColumnDefinitionFromSchema(column);\n statements.push(`ALTER TABLE ${tableName} ADD COLUMN ${colDef};`);\n }\n }\n\n // Alter existing columns\n if (diff.columnsToAlter?.length) {\n for (const { to } of diff.columnsToAlter) {\n const colDef = this.generateColumnDefinitionFromSchema(to);\n const colStatements = this.generateAlterColumnStatements(diff.tableName, to, colDef);\n statements.push(...colStatements);\n }\n }\n\n // Drop columns\n if (diff.columnsToDrop?.length) {\n for (const columnName of diff.columnsToDrop) {\n statements.push(`ALTER TABLE ${tableName} DROP COLUMN ${this.escapeId(columnName)};`);\n }\n }\n\n // Add indexes\n if (diff.indexesToAdd?.length) {\n for (const index of diff.indexesToAdd) {\n statements.push(this.generateCreateIndex(diff.tableName, index));\n }\n }\n\n // Drop indexes\n if (diff.indexesToDrop?.length) {\n for (const indexName of diff.indexesToDrop) {\n statements.push(this.generateDropIndex(diff.tableName, indexName));\n }\n }\n\n return statements;\n }\n\n generateAlterTableDown(diff: SchemaDiff): string[] {\n const statements: string[] = [];\n const tableName = this.escapeId(diff.tableName);\n\n // Reverse column additions by dropping them\n if (diff.columnsToAdd?.length) {\n for (const column of diff.columnsToAdd) {\n statements.push(`ALTER TABLE ${tableName} DROP COLUMN ${this.escapeId(column.name)};`);\n }\n }\n\n // Reverse column alterations by restoring original schema\n if (diff.columnsToAlter?.length) {\n for (const { from } of diff.columnsToAlter) {\n const colDef = this.generateColumnDefinitionFromSchema(from, { includePrimaryKey: false });\n const colStatements = this.generateAlterColumnStatements(diff.tableName, from, colDef);\n statements.push(...colStatements);\n }\n }\n\n // Reverse index additions by dropping them\n if (diff.indexesToAdd?.length) {\n for (const index of diff.indexesToAdd) {\n statements.push(this.generateDropIndex(diff.tableName, index.name));\n }\n }\n\n if (diff.columnsToDrop?.length || diff.indexesToDrop?.length) {\n statements.push(`-- TODO: Manual reversal needed for dropped columns/indexes`);\n }\n\n return statements;\n }\n\n generateCreateIndex(tableName: string, index: IndexSchema, options: { ifNotExists?: boolean } = {}): string {\n const unique = index.unique ? 'UNIQUE ' : '';\n const ifNotExists = (options.ifNotExists ?? this.features.indexIfNotExists) ? 'IF NOT EXISTS ' : '';\n const opsClassMap = this.dialect.vectorOpsClass;\n const hasOpsClass = opsClassMap && (index.type === 'hnsw' || index.type === 'ivfflat');\n\n // For pgvector indexes: append operator class to the column\n const columns = index.columns\n .map((c) => {\n const escaped = this.escapeId(c);\n if (hasOpsClass && index.distance) {\n const opsClass = opsClassMap[index.distance];\n return opsClass ? `${escaped} ${opsClass}` : escaped;\n }\n return escaped;\n })\n .join(', ');\n\n const using = index.type ? ` USING ${index.type}` : '';\n\n // Build WITH params for vector indexes with operator class support\n let withClause = '';\n if (hasOpsClass) {\n const withParams: string[] = [];\n if (index.m !== undefined) withParams.push(`m = ${index.m}`);\n if (index.efConstruction !== undefined) withParams.push(`ef_construction = ${index.efConstruction}`);\n if (index.lists !== undefined) withParams.push(`lists = ${index.lists}`);\n withClause = withParams.length > 0 ? ` WITH (${withParams.join(', ')})` : '';\n }\n\n return `CREATE ${unique}INDEX ${ifNotExists}${this.escapeId(index.name)} ON ${this.escapeId(tableName)}${using} (${columns})${withClause};`;\n }\n\n generateDropIndex(tableName: string, indexName: string): string {\n if (this.dialect.dropIndexSyntax === 'on-table') {\n return `DROP INDEX ${this.escapeId(indexName)} ON ${this.escapeId(tableName)};`;\n }\n return `DROP INDEX IF EXISTS ${this.escapeId(indexName)};`;\n }\n\n /**\n * Generate column definition from a ColumnSchema object\n */\n public generateColumnDefinitionFromSchema(\n column: ColumnSchema,\n options: { includePrimaryKey?: boolean; includeUnique?: boolean } = {},\n ): string {\n const { includePrimaryKey = true, includeUnique = true } = options;\n\n let type = column.type;\n\n if (!type.includes('(')) {\n if (column.precision !== undefined) {\n if (column.scale !== undefined) {\n type += `(${column.precision}, ${column.scale})`;\n } else {\n type += `(${column.precision})`;\n }\n } else if (column.length !== undefined) {\n type += `(${column.length})`;\n }\n }\n\n if (!includePrimaryKey) {\n type = type.replace(/\\s+PRIMARY\\s+KEY/i, '');\n }\n\n let definition = `${this.escapeId(column.name)} ${type}`;\n\n if (includePrimaryKey && column.isPrimaryKey && !type.includes('PRIMARY KEY')) {\n definition += ' PRIMARY KEY';\n }\n\n if (!column.nullable && !column.isPrimaryKey) {\n definition += ' NOT NULL';\n }\n\n if (includeUnique && column.isUnique && !column.isPrimaryKey) {\n definition += ' UNIQUE';\n }\n\n if (column.defaultValue !== undefined) {\n definition += ` DEFAULT ${this.formatDefaultValue(column.defaultValue)}`;\n }\n\n if (column.comment) {\n definition += this.generateColumnComment(column.name, column.comment);\n }\n\n return definition;\n }\n\n public getSqlType(field: FieldOptions, fieldType?: unknown): string {\n // If field has a reference, inherit type from the target primary key\n if (field.references) {\n const refEntity = field.references();\n const refMeta = getMeta(refEntity);\n const refIdField = refMeta.fields[refMeta.id!];\n return this.getSqlType(\n { ...refIdField, references: undefined, isId: undefined, autoIncrement: false },\n refIdField!.type,\n );\n }\n\n // Get canonical type and convert to SQL\n const canonical = this.getCanonicalType(field, fieldType);\n\n // Special case for serial primary keys\n if (isAutoIncrement(field, field.isId === true)) {\n return this.dialect.serialPrimaryKey;\n }\n\n return this.canonicalTypeToSql(canonical);\n }\n\n /**\n * Get the boolean type for this database\n */\n public getBooleanType(): string {\n return this.canonicalTypeToSql({ category: 'boolean' });\n }\n\n /**\n * Generate ALTER COLUMN statements (database-specific)\n */\n public generateAlterColumnStatements(tableName: string, column: ColumnSchema, newDefinition: string): string[] {\n const table = this.escapeId(tableName);\n const colName = this.escapeId(column.name);\n\n if (this.dialect.alterColumnSyntax === 'none') {\n throw new Error(\n `${this.dialect}: Cannot alter column \"${column.name}\" - you must recreate the table. ` +\n `This database does not support ALTER COLUMN.`,\n );\n }\n\n if (this.dialect.alterColumnStrategy === 'separate-clauses') {\n const statements: string[] = [];\n // Separate ALTER COLUMN clauses for different changes (Postgres)\n statements.push(`ALTER TABLE ${table} ALTER COLUMN ${colName} TYPE ${column.type};`);\n\n if (column.nullable) {\n statements.push(`ALTER TABLE ${table} ALTER COLUMN ${colName} DROP NOT NULL;`);\n } else {\n statements.push(`ALTER TABLE ${table} ALTER COLUMN ${colName} SET NOT NULL;`);\n }\n\n if (column.defaultValue !== undefined) {\n statements.push(\n `ALTER TABLE ${table} ALTER COLUMN ${colName} SET DEFAULT ${this.formatDefaultValue(column.defaultValue)};`,\n );\n } else {\n statements.push(`ALTER TABLE ${table} ALTER COLUMN ${colName} DROP DEFAULT;`);\n }\n return statements;\n }\n\n return [`ALTER TABLE ${table} ${this.dialect.alterColumnSyntax} ${newDefinition};`];\n }\n\n /**\n * Get table options (e.g., ENGINE for MySQL)\n */\n public getTableOptions<E>(_meta: EntityMeta<E>): string {\n return this.dialect.tableOptions ? ` ${this.dialect.tableOptions}` : '';\n }\n\n /**\n * Generate column comment clause (if supported)\n */\n public generateColumnComment(columnName: string, comment: string): string {\n if (this.features.columnComment) {\n const escapedComment = comment.replace(/'/g, \"''\");\n return ` COMMENT '${escapedComment}'`;\n }\n return '';\n }\n\n /**\n * Format a default value for SQL\n */\n public formatDefaultValue(value: unknown): string {\n if (this.dialect.booleanLiteral === 'integer' && typeof value === 'boolean') {\n return value ? '1' : '0';\n }\n return formatDefaultValue(value);\n }\n\n /**\n * Compare an entity with a database table node and return the differences.\n */\n diffSchema<E>(entity: Type<E>, currentTable: TableNode | undefined): SchemaDiff | undefined {\n const meta = getMeta(entity);\n\n if (!currentTable) {\n return {\n tableName: this.dialect.resolveTableName(entity, meta),\n type: 'create',\n };\n }\n\n const columnsToAdd: ColumnSchema[] = [];\n const columnsToAlter: { from: ColumnSchema; to: ColumnSchema }[] = [];\n const columnsToDrop: string[] = [];\n\n const currentColumns = new Map<string, ColumnNode>(currentTable.columns);\n const fieldKeys = getKeys(meta.fields) as FieldKey<E>[];\n\n for (const key of fieldKeys) {\n const field = meta.fields[key];\n if (!field || field.virtual) continue;\n\n const columnName = this.dialect.resolveColumnName(key, field);\n const currentColumn = currentColumns.get(columnName);\n\n if (!currentColumn) {\n columnsToAdd.push(this.fieldToColumnSchema(key, field, meta));\n } else {\n const desiredColumn = this.fieldToColumnSchema(key, field, meta);\n const currentColumnSchema = this.columnNodeToSchema(currentColumn);\n if (this.columnsNeedAlteration(currentColumnSchema, desiredColumn)) {\n columnsToAlter.push({ from: currentColumnSchema, to: desiredColumn });\n }\n }\n currentColumns.delete(columnName);\n }\n\n for (const [name] of currentColumns) {\n columnsToDrop.push(name);\n }\n\n if (columnsToAdd.length === 0 && columnsToAlter.length === 0 && columnsToDrop.length === 0) {\n return undefined;\n }\n\n return {\n tableName: this.dialect.resolveTableName(entity, meta),\n type: 'alter',\n columnsToAdd: columnsToAdd.length > 0 ? columnsToAdd : undefined,\n columnsToAlter: columnsToAlter.length > 0 ? columnsToAlter : undefined,\n columnsToDrop: columnsToDrop.length > 0 ? columnsToDrop : undefined,\n };\n }\n\n private columnNodeToSchema(col: ColumnNode): ColumnSchema {\n return {\n name: col.name,\n type: this.canonicalTypeToSql(col.type),\n nullable: col.nullable,\n defaultValue: col.defaultValue,\n isPrimaryKey: col.isPrimaryKey,\n isAutoIncrement: col.isAutoIncrement,\n isUnique: col.isUnique,\n comment: col.comment,\n };\n }\n\n /**\n * Convert field options to ColumnSchema\n */\n protected fieldToColumnSchema<E>(fieldKey: string, field: FieldOptions, meta: EntityMeta<E>): ColumnSchema {\n const isPrimaryKey = field.isId === true && meta.id === fieldKey;\n\n return {\n name: this.dialect.resolveColumnName(fieldKey, field),\n type: this.getSqlType(field, field.type),\n nullable: field.nullable ?? !isPrimaryKey,\n defaultValue: field.defaultValue,\n isPrimaryKey,\n isAutoIncrement: isAutoIncrement(field, isPrimaryKey),\n isUnique: field.unique ?? false,\n length: field.length,\n precision: field.precision,\n scale: field.scale,\n comment: field.comment,\n };\n }\n\n /**\n * Check if two columns differ enough to require alteration\n */\n protected columnsNeedAlteration(current: ColumnSchema, desired: ColumnSchema): boolean {\n if (current.isPrimaryKey && desired.isPrimaryKey) {\n return false;\n }\n\n if (current.isPrimaryKey !== desired.isPrimaryKey) return true;\n if (current.nullable !== desired.nullable) return true;\n if (current.isUnique !== desired.isUnique) return true;\n\n if (!this.isTypeEqual(current, desired)) return true;\n if (!this.isDefaultValueEqual(current.defaultValue, desired.defaultValue)) return true;\n\n return false;\n }\n\n /**\n * Compare two column types for equality using the canonical type system\n */\n protected isTypeEqual(current: ColumnSchema, desired: ColumnSchema): boolean {\n const typeA = sqlToCanonical(current.type);\n const typeB = sqlToCanonical(desired.type);\n return areTypesEqual(typeA, typeB);\n }\n\n /**\n * Compare two default values for equality\n */\n protected isDefaultValueEqual(current: unknown, desired: unknown): boolean {\n if (current === desired) return true;\n if (current === undefined || desired === undefined) return current === desired;\n\n const normalize = (val: unknown): string => {\n if (val === null) return 'null';\n if (typeof val === 'string') {\n let s = val.replace(/::[a-z_]+(\\s+[a-z_]+)*(\\[\\])?$/i, '');\n s = s.replace(/^'(.*)'$/, '$1');\n if (s.toLowerCase() === 'null') return 'null';\n return s;\n }\n return typeof val === 'object' ? JSON.stringify(val) : String(val);\n };\n\n return normalize(current) === normalize(desired);\n }\n\n // ============================================================================\n // SchemaAST Support Methods\n // ============================================================================\n\n generateCreateTableFromNode(table: TableNode, options: { ifNotExists?: boolean } = {}): string[] {\n const columns: string[] = [];\n const constraints: string[] = [];\n\n for (const col of table.columns.values()) {\n const colDef = this.generateColumnFromNode(col);\n columns.push(colDef);\n }\n\n if (table.primaryKey.length > 1) {\n const pkCols = table.primaryKey.map((c) => this.escapeId(c.name)).join(', ');\n constraints.push(`PRIMARY KEY (${pkCols})`);\n }\n\n for (const rel of table.outgoingRelations) {\n if (rel.from.columns.length > 0) {\n const fromCols = rel.from.columns.map((c) => this.escapeId(c.name)).join(', ');\n const toCols = rel.to.columns.map((c) => this.escapeId(c.name)).join(', ');\n const constraintName = rel.name ? `CONSTRAINT ${this.escapeId(rel.name)} ` : '';\n constraints.push(\n `${constraintName}FOREIGN KEY (${fromCols}) REFERENCES ${this.escapeId(rel.to.table.name)} (${toCols})` +\n ` ON DELETE ${rel.onDelete ?? this.defaultForeignKeyAction} ON UPDATE ${rel.onUpdate ?? this.defaultForeignKeyAction}`,\n );\n }\n }\n\n const ifNotExists = options.ifNotExists && this.features.ifNotExists ? 'IF NOT EXISTS ' : '';\n let createSql = `CREATE TABLE ${ifNotExists}${this.escapeId(table.name)} (\\n`;\n createSql += columns.map((col) => ` ${col}`).join(',\\n');\n\n if (constraints.length > 0) {\n createSql += ',\\n';\n createSql += constraints.map((c) => ` ${c}`).join(',\\n');\n }\n\n const isInlineVectorIdx = this.features.vectorIndexStyle === 'inline';\n const vectorIndexes = isInlineVectorIdx ? table.indexes.filter((idx) => idx.type === 'vector') : [];\n const regularIndexes = isInlineVectorIdx ? table.indexes.filter((idx) => idx.type !== 'vector') : table.indexes;\n\n if (vectorIndexes.length > 0) {\n createSql += ',\\n';\n createSql += vectorIndexes.map((idx) => ` ${this.generateInlineVectorIndex(idx)}`).join(',\\n');\n }\n\n createSql += '\\n)';\n\n if (this.dialect.tableOptions) {\n createSql += ` ${this.dialect.tableOptions}`;\n }\n\n createSql += ';';\n\n const statements: string[] = [];\n if (this.dialect.vectorExtension) {\n const hasVectorCol = [...table.columns.values()].some((c) => isVectorCategory(c.type.category));\n if (hasVectorCol) {\n statements.push(`CREATE EXTENSION IF NOT EXISTS ${this.dialect.vectorExtension};`);\n }\n }\n statements.push(createSql);\n for (const idx of regularIndexes) {\n statements.push(this.generateCreateIndexFromNode(idx));\n }\n return statements;\n }\n\n /**\n * Generate a column definition from a ColumnNode.\n */\n protected generateColumnFromNode(col: ColumnNode): string {\n const colName = this.escapeId(col.name);\n let sqlType = this.canonicalTypeToSql(col.type);\n\n if (col.isPrimaryKey && col.isAutoIncrement) {\n sqlType = this.serialPrimaryKeyType;\n }\n\n let def = `${colName} ${sqlType}`;\n\n if (!col.nullable && !col.isPrimaryKey) {\n def += ' NOT NULL';\n }\n\n if (col.isPrimaryKey && col.table.primaryKey.length === 1 && !sqlType.includes('PRIMARY KEY')) {\n def += ' PRIMARY KEY';\n }\n\n if (col.isUnique && !col.isPrimaryKey) {\n def += ' UNIQUE';\n }\n\n if (col.defaultValue !== undefined) {\n def += ` DEFAULT ${this.formatDefaultValue(col.defaultValue)}`;\n }\n\n if (col.comment) {\n def += this.generateColumnComment(col.name, col.comment);\n }\n\n return def;\n }\n\n /**\n * Generate an inline VECTOR INDEX clause for use inside CREATE TABLE.\n * Syntax: `VECTOR INDEX (col) M=n DISTANCE=metric`\n */\n private generateInlineVectorIndex(index: IndexNode): string {\n const columns = index.columns.map((c) => this.escapeId(c.name)).join(', ');\n let clause = `VECTOR INDEX (${columns})`;\n\n if (index.m !== undefined) {\n clause += ` M=${index.m}`;\n }\n\n if (index.distance) {\n const metric = INLINE_VECTOR_DISTANCE_MAP[index.distance] ?? 'euclidean';\n clause += ` DISTANCE=${metric}`;\n }\n\n return clause;\n }\n\n /**\n * Generate CREATE INDEX SQL from an IndexNode.\n * Delegates to `generateCreateIndex` for unified SQL assembly.\n */\n generateCreateIndexFromNode(index: IndexNode, options: { ifNotExists: boolean } = { ifNotExists: false }): string {\n return this.generateCreateIndex(\n index.table.name,\n {\n name: index.name,\n columns: index.columns.map((c) => c.name),\n unique: index.unique,\n type: index.type,\n distance: index.distance,\n m: index.m,\n efConstruction: index.efConstruction,\n lists: index.lists,\n },\n options,\n );\n }\n\n /**\n * Generate DROP TABLE SQL from a TableNode.\n */\n generateDropTableFromNode(table: TableNode, options: { ifExists?: boolean } = {}): string {\n const ifExists = options.ifExists ? 'IF EXISTS ' : '';\n return `DROP TABLE ${ifExists}${this.escapeId(table.name)};`;\n }\n\n // ============================================================================\n // Phase 3: Builder Operation Methods (Moved forward for unification)\n // ============================================================================\n\n generateCreateTableFromDefinition(table: TableDefinition, options: { ifNotExists?: boolean } = {}): string[] {\n const tableNode = this.tableDefinitionToNode(table);\n return this.generateCreateTableFromNode(tableNode, options);\n }\n\n generateDropTableSql(tableName: string, options?: { ifExists?: boolean; cascade?: boolean }): string {\n const ifExists = options?.ifExists ? 'IF EXISTS ' : '';\n // Use dialect-specific cascade support from config\n const cascade = options?.cascade && this.features.dropTableCascade ? ' CASCADE' : '';\n return `DROP TABLE ${ifExists}${this.escapeId(tableName)}${cascade};`;\n }\n\n generateRenameTableSql(oldName: string, newName: string): string {\n if (this.dialect.renameTableSyntax === 'rename-table') {\n return `RENAME TABLE ${this.escapeId(oldName)} TO ${this.escapeId(newName)};`;\n }\n return `ALTER TABLE ${this.escapeId(oldName)} RENAME TO ${this.escapeId(newName)};`;\n }\n\n generateAddColumnSql(tableName: string, column: FullColumnDefinition): string {\n const colSql = this.generateColumnFromNode(this.fullColumnDefinitionToNode(column, tableName));\n return `ALTER TABLE ${this.escapeId(tableName)} ADD COLUMN ${colSql};`;\n }\n\n generateAlterColumnSql(tableName: string, columnName: string, column: FullColumnDefinition): string {\n const colSql = this.generateColumnFromNode(this.fullColumnDefinitionToNode(column, tableName));\n return this.generateAlterColumnStatements(tableName, { name: columnName, type: '' } as ColumnSchema, colSql).join(\n '\\n',\n );\n }\n\n generateDropColumnSql(tableName: string, columnName: string): string {\n return `ALTER TABLE ${this.escapeId(tableName)} DROP COLUMN ${this.escapeId(columnName)};`;\n }\n\n generateRenameColumnSql(tableName: string, oldName: string, newName: string): string {\n return `ALTER TABLE ${this.escapeId(tableName)} RENAME COLUMN ${this.escapeId(oldName)} TO ${this.escapeId(newName)};`;\n }\n\n generateCreateIndexSql(tableName: string, index: IndexSchema): string {\n return this.generateCreateIndex(tableName, index);\n }\n\n generateDropIndexSql(tableName: string, indexName: string): string {\n return this.generateDropIndex(tableName, indexName);\n }\n\n generateAddForeignKeySql(tableName: string, foreignKey: TableForeignKeyDefinition): string {\n const fkCols = foreignKey.columns.map((c) => this.escapeId(c)).join(', ');\n const refCols = foreignKey.referencesColumns.map((c) => this.escapeId(c)).join(', ');\n const constraintName = foreignKey.name\n ? this.escapeId(foreignKey.name)\n : this.escapeId(`fk_${tableName}_${foreignKey.columns.join('_')}`);\n\n if (!this.features.foreignKeyAlter) {\n throw new Error(`Dialect ${this.dialect} does not support adding foreign keys to existing tables`);\n }\n\n return (\n `ALTER TABLE ${this.escapeId(tableName)} ADD CONSTRAINT ${constraintName} ` +\n `FOREIGN KEY (${fkCols}) REFERENCES ${this.escapeId(foreignKey.referencesTable)} (${refCols}) ` +\n `ON DELETE ${foreignKey.onDelete ?? this.defaultForeignKeyAction} ON UPDATE ${foreignKey.onUpdate ?? this.defaultForeignKeyAction};`\n );\n }\n\n generateDropForeignKeySql(tableName: string, constraintName: string): string {\n return `ALTER TABLE ${this.escapeId(tableName)} ${this.dialect.dropForeignKeySyntax} ${this.escapeId(constraintName)};`;\n }\n\n private tableDefinitionToNode(def: TableDefinition): TableNode {\n const columns = new Map<string, ColumnNode>();\n const pkNodes: ColumnNode[] = [];\n\n const table: TableNode = {\n name: def.name,\n columns,\n primaryKey: [], // placeholder\n indexes: [],\n schema: { tables: new Map(), relationships: [], indexes: [] },\n incomingRelations: [],\n outgoingRelations: [],\n comment: def.comment,\n };\n\n for (const colDef of def.columns) {\n const node = this.fullColumnDefinitionToNode(colDef, def.name);\n (node as { table: TableNode }).table = table;\n columns.set(node.name, node);\n if (node.isPrimaryKey) {\n pkNodes.push(node);\n }\n }\n\n const finalPrimaryKey = def.primaryKey\n ? def.primaryKey.map((name) => columns.get(name)).filter((c): c is ColumnNode => c !== undefined)\n : pkNodes;\n\n (table as { primaryKey: ColumnNode[] }).primaryKey = finalPrimaryKey;\n\n for (const idxDef of def.indexes) {\n const indexNode: IndexNode = {\n name: idxDef.name,\n table,\n columns: idxDef.columns.map((name) => columns.get(name)).filter((c): c is ColumnNode => c !== undefined),\n unique: idxDef.unique,\n };\n table.indexes.push(indexNode);\n }\n\n for (const fkDef of def.foreignKeys) {\n const relNode: RelationshipNode = {\n name: fkDef.name ?? `fk_${def.name}_${fkDef.columns.join('_')}`,\n type: 'ManyToOne', // Builder default\n from: {\n table,\n columns: fkDef.columns.map((name) => columns.get(name)).filter((c): c is ColumnNode => c !== undefined),\n },\n to: {\n table: { name: fkDef.referencesTable } as TableNode,\n columns: fkDef.referencesColumns.map((name) => ({ name }) as ColumnNode),\n },\n onDelete: fkDef.onDelete,\n onUpdate: fkDef.onUpdate,\n };\n table.outgoingRelations.push(relNode);\n }\n\n return table;\n }\n\n private fullColumnDefinitionToNode(col: FullColumnDefinition, tableName: string): ColumnNode {\n return {\n name: col.name,\n type: col.type,\n nullable: col.nullable,\n defaultValue: col.defaultValue,\n isPrimaryKey: col.primaryKey,\n isAutoIncrement: col.autoIncrement,\n isUnique: col.unique,\n comment: col.comment,\n table: { name: tableName } as TableNode,\n referencedBy: [],\n references: col.foreignKey\n ? {\n name: `fk_${tableName}_${col.name}`,\n type: 'ManyToOne',\n from: { table: { name: tableName } as TableNode, columns: [] },\n to: {\n table: { name: col.foreignKey.table } as TableNode,\n columns: col.foreignKey.columns.map((name) => ({ name }) as ColumnNode),\n },\n onDelete: col.foreignKey.onDelete,\n onUpdate: col.foreignKey.onUpdate,\n }\n : undefined,\n };\n }\n}\n\n/**\n * Synchronous factory for SQL schema generators only.\n * For MongoDB, use `createSchemaGeneratorAsync` from `./schemaGeneratorAsync.js` so the optional `mongodb` peer is not loaded at import time.\n */\nexport function createSchemaGenerator(\n dialect: AbstractDialect,\n namingStrategy?: NamingStrategy,\n defaultForeignKeyAction?: ForeignKeyAction,\n): SchemaGenerator | undefined {\n if (!(dialect instanceof AbstractSqlDialect)) {\n return undefined;\n }\n return new SqlSchemaGenerator(dialect, defaultForeignKeyAction);\n}\n","/**\n * Splits a SQL blob on semicolons into separate statements.\n *\n * Uses a declarative Master-Regex scanner to rapidly\n * identify and skip \"non-splittable\" blocks (strings, comments, dollar-quotes) in a single pass.\n * This approach is $O(n)$, leverages native regex speed, and is trivially easy to audit.\n *\n * Handles:\n * - Single quotes: '...' (standard SQL, respects '' and \\')\n * - Double quotes: \"...\" (identifiers or MySQL strings)\n * - Backticks: `...` (MySQL identifiers)\n * - Postgres Dollar quotes: $tag$...$tag$ or $$...$$\n * - Comments: -- and /* ... *\\/\n */\nexport function splitSqlStatements(sql: string): string[] {\n const statements: string[] = [];\n let lastIndex = 0;\n\n // This regex matches:\n // 1. Single quoted strings: '(?:''|\\\\['\\\\]|[^'])*(?:'|(?=$))\n // 2. Double quoted identifiers: \"(?:\"\"|\\\\[\"\\\\]|[^\"])*(?:\"|(?=$))\n // 3. Backticked identifiers: `(?:``|\\\\[`\\\\]|[^`])*(?:`|(?=$))\n // 4. Postgres Dollar quoted blocks: \\$(?<tag>[a-zA-Z0-9_]*)\\$[\\s\\S]*?(?:\\$\\k<tag>|(?=$))\n // 5. Single-line comments: --.*\n // 6. Multi-line comments: \\/\\*[\\s\\S]*?(?:\\*\\/|(?=$))\n // 7. Statement terminator: ;\n const masterRegex =\n /'(?:''|\\\\['\\\\]|[^'])*(?:'|(?=$))|\"(?:\"\"|\\\\[\"\\\\]|[^\"])*(?:\"|(?=$))|`(?:``|\\\\[`\\\\]|[^`])*(?:`|(?=$))|\\$(?<tag>[a-zA-Z0-9_]*)\\$[\\s\\S]*?(?:\\$\\k<tag>|(?=$))|--.*|\\/\\*[\\s\\S]*?(?:\\*\\/|(?=$))|;/g;\n\n for (const match of sql.matchAll(masterRegex)) {\n if (match[0] === ';') {\n const stmt = sql.substring(lastIndex, match.index ?? 0).trim();\n if (stmt) {\n statements.push(stmt);\n }\n lastIndex = (match.index ?? 0) + match[0].length;\n }\n }\n\n const lastStmt = sql.substring(lastIndex).trim();\n if (lastStmt) {\n statements.push(lastStmt);\n }\n\n return statements;\n}\n\n/** Legacy alias kept for backward compatibility. */\nexport const splitSqlStatementsOnSemicolons = splitSqlStatements;\n","/**\n * Table Builder\n *\n * Fluent API for defining tables in migrations.\n */\n\nimport type { ForeignKeyAction } from '../../schema/types.js';\nimport { ColumnBuilder } from './columnBuilder.js';\nimport { t } from './expressions.js';\nimport type {\n BaseColumnOptions,\n DecimalColumnOptions,\n IColumnBuilder,\n IndexDefinition,\n ITableBuilder,\n ITableForeignKeyBuilder,\n StringColumnOptions,\n TableDefinition,\n TableForeignKeyDefinition,\n VectorColumnOptions,\n} from './types.js';\n\n/**\n * Builder for table-level foreign keys.\n */\nclass TableForeignKeyBuilder implements ITableForeignKeyBuilder {\n private _columns: string[];\n private _referencesTable?: string;\n private _referencesColumns: string[] = [];\n private _onDelete: ForeignKeyAction = 'NO ACTION';\n private _onUpdate: ForeignKeyAction = 'NO ACTION';\n private _name?: string;\n\n constructor(columns: string[], _parent: TableBuilder) {\n this._columns = columns;\n }\n\n references(table: string, columns: string[]): this {\n this._referencesTable = table;\n this._referencesColumns = columns;\n return this;\n }\n\n onDelete(action: ForeignKeyAction): this {\n this._onDelete = action;\n return this;\n }\n\n onUpdate(action: ForeignKeyAction): this {\n this._onUpdate = action;\n return this;\n }\n\n name(name: string): this {\n this._name = name;\n return this;\n }\n\n /**\n * Build the foreign key definition.\n */\n build(): TableForeignKeyDefinition | undefined {\n if (!this._referencesTable) return undefined;\n\n return {\n name: this._name,\n columns: this._columns,\n referencesTable: this._referencesTable,\n referencesColumns: this._referencesColumns,\n onDelete: this._onDelete,\n onUpdate: this._onUpdate,\n };\n }\n}\n\n/**\n * Builder for table definitions with a fluent API.\n */\nexport class TableBuilder implements ITableBuilder {\n private _name: string;\n private _columnBuilders: ColumnBuilder[] = [];\n private _primaryKey?: string[];\n private _indexes: IndexDefinition[] = [];\n private _foreignKeyBuilders: TableForeignKeyBuilder[] = [];\n private _comment?: string;\n\n constructor(name: string) {\n this._name = name;\n }\n\n // ============================================================================\n // Numeric Types\n // ============================================================================\n\n id(name = 'id', options: BaseColumnOptions = {}): IColumnBuilder {\n const col = new ColumnBuilder(name, { category: 'integer' }, { ...options, primaryKey: true, autoIncrement: true });\n this._columnBuilders.push(col);\n return col;\n }\n\n integer(name: string, options: BaseColumnOptions = {}): IColumnBuilder {\n const col = new ColumnBuilder(name, { category: 'integer' }, options);\n this._columnBuilders.push(col);\n return col;\n }\n\n smallint(name: string, options: BaseColumnOptions = {}): IColumnBuilder {\n const col = new ColumnBuilder(name, { category: 'integer', size: 'small' }, options);\n this._columnBuilders.push(col);\n return col;\n }\n\n bigint(name: string, options: BaseColumnOptions = {}): IColumnBuilder {\n const col = new ColumnBuilder(name, { category: 'integer', size: 'big' }, options);\n this._columnBuilders.push(col);\n return col;\n }\n\n float(name: string, options: BaseColumnOptions = {}): IColumnBuilder {\n const col = new ColumnBuilder(name, { category: 'float' }, options);\n this._columnBuilders.push(col);\n return col;\n }\n\n double(name: string, options: BaseColumnOptions = {}): IColumnBuilder {\n const col = new ColumnBuilder(name, { category: 'float', size: 'big' }, options);\n this._columnBuilders.push(col);\n return col;\n }\n\n decimal(name: string, options: DecimalColumnOptions = {}): IColumnBuilder {\n const { precision, scale, ...rest } = options;\n const col = new ColumnBuilder(name, { category: 'decimal', precision, scale }, rest);\n this._columnBuilders.push(col);\n return col;\n }\n\n // ============================================================================\n // String Types\n // ============================================================================\n\n string(name: string, options: StringColumnOptions = {}): IColumnBuilder {\n const { length = 255, ...rest } = options;\n const col = new ColumnBuilder(name, { category: 'string', length }, rest);\n this._columnBuilders.push(col);\n return col;\n }\n\n char(name: string, options: StringColumnOptions = {}): IColumnBuilder {\n const { length = 1, ...rest } = options;\n const col = new ColumnBuilder(name, { category: 'string', length }, rest);\n this._columnBuilders.push(col);\n return col;\n }\n\n text(name: string, options: BaseColumnOptions = {}): IColumnBuilder {\n const col = new ColumnBuilder(name, { category: 'string' }, options);\n this._columnBuilders.push(col);\n return col;\n }\n\n // ============================================================================\n // Boolean\n // ============================================================================\n\n boolean(name: string, options: BaseColumnOptions = {}): IColumnBuilder {\n const col = new ColumnBuilder(name, { category: 'boolean' }, options);\n this._columnBuilders.push(col);\n return col;\n }\n\n // ============================================================================\n // Date/Time Types\n // ============================================================================\n\n date(name: string, options: BaseColumnOptions = {}): IColumnBuilder {\n const col = new ColumnBuilder(name, { category: 'date' }, options);\n this._columnBuilders.push(col);\n return col;\n }\n\n time(name: string, options: BaseColumnOptions = {}): IColumnBuilder {\n const col = new ColumnBuilder(name, { category: 'time' }, options);\n this._columnBuilders.push(col);\n return col;\n }\n\n timestamp(name: string, options: BaseColumnOptions = {}): IColumnBuilder {\n const col = new ColumnBuilder(name, { category: 'timestamp' }, options);\n this._columnBuilders.push(col);\n return col;\n }\n\n timestamptz(name: string, options: BaseColumnOptions = {}): IColumnBuilder {\n const col = new ColumnBuilder(name, { category: 'timestamp', withTimezone: true }, options);\n this._columnBuilders.push(col);\n return col;\n }\n\n // ============================================================================\n // JSON Types\n // ============================================================================\n\n json(name: string, options: BaseColumnOptions = {}): IColumnBuilder {\n const col = new ColumnBuilder(name, { category: 'json' }, options);\n this._columnBuilders.push(col);\n return col;\n }\n\n jsonb(name: string, options: BaseColumnOptions = {}): IColumnBuilder {\n // JSONB is the same category, dialect handles the difference\n const col = new ColumnBuilder(name, { category: 'json' }, options);\n this._columnBuilders.push(col);\n return col;\n }\n\n // ============================================================================\n // Other Types\n // ============================================================================\n\n uuid(name: string, options: BaseColumnOptions = {}): IColumnBuilder {\n const col = new ColumnBuilder(name, { category: 'uuid' }, options);\n this._columnBuilders.push(col);\n return col;\n }\n\n blob(name: string, options: BaseColumnOptions = {}): IColumnBuilder {\n const col = new ColumnBuilder(name, { category: 'blob' }, options);\n this._columnBuilders.push(col);\n return col;\n }\n\n vector(name: string, options: VectorColumnOptions = {}): IColumnBuilder {\n const { dimensions, ...rest } = options;\n const col = new ColumnBuilder(name, { category: 'vector', length: dimensions }, rest);\n this._columnBuilders.push(col);\n return col;\n }\n\n // ============================================================================\n // Convenience Methods\n // ============================================================================\n\n createdAt(): IColumnBuilder {\n const col = new ColumnBuilder('createdAt', { category: 'timestamp' }, { defaultValue: t.now() });\n this._columnBuilders.push(col);\n return col;\n }\n\n updatedAt(): IColumnBuilder {\n const col = new ColumnBuilder('updatedAt', { category: 'timestamp' }, { defaultValue: t.now() });\n this._columnBuilders.push(col);\n return col;\n }\n\n timestamps(): void {\n this.createdAt();\n this.updatedAt();\n }\n\n // ============================================================================\n // Indexes & Constraints\n // ============================================================================\n\n primaryKey(columns: string[]): this {\n this._primaryKey = columns;\n return this;\n }\n\n unique(columns: string[], name?: string): this {\n const indexName = name ?? `uq_${this._name}_${columns.join('_')}`;\n this._indexes.push({\n name: indexName,\n columns,\n unique: true,\n });\n return this;\n }\n\n index(columns: string[], name?: string): this {\n const indexName = name ?? `idx_${this._name}_${columns.join('_')}`;\n this._indexes.push({\n name: indexName,\n columns,\n unique: false,\n });\n return this;\n }\n\n foreignKey(columns: string[]): ITableForeignKeyBuilder {\n const fk = new TableForeignKeyBuilder(columns, this);\n this._foreignKeyBuilders.push(fk);\n return fk;\n }\n\n // ============================================================================\n // Utilities\n // ============================================================================\n\n comment(text: string): this {\n this._comment = text;\n return this;\n }\n\n /**\n * Build the table definition.\n */\n build(): TableDefinition {\n // Build all columns from builders\n const columns = this._columnBuilders.map((cb) => cb.build());\n\n // Collect column-level indexes\n for (const col of columns) {\n if (col.index) {\n const indexName = typeof col.index === 'string' ? col.index : `idx_${this._name}_${col.name}`;\n\n // Only add if not already in table-level indexes\n if (!this._indexes.some((idx) => idx.name === indexName)) {\n this._indexes.push({\n name: indexName,\n columns: [col.name],\n unique: col.unique,\n });\n }\n }\n }\n\n // Build foreign keys\n const foreignKeys = this._foreignKeyBuilders\n .map((fk) => fk.build())\n .filter((fk): fk is TableForeignKeyDefinition => fk !== undefined);\n\n // Collect column-level foreign keys\n for (const col of columns) {\n if (col.foreignKey) {\n foreignKeys.push({\n name: col.foreignKey.name,\n columns: [col.name],\n referencesTable: col.foreignKey.table,\n referencesColumns: col.foreignKey.columns,\n onDelete: col.foreignKey.onDelete,\n onUpdate: col.foreignKey.onUpdate,\n });\n }\n }\n\n return {\n name: this._name,\n columns,\n primaryKey: this._primaryKey,\n indexes: this._indexes,\n foreignKeys,\n comment: this._comment,\n };\n }\n}\n","/**\n * Migration Builder\n *\n * Provides type-safe migration operations with two modes:\n * - OperationRecorder: Record operations only (for code generation)\n * - MigrationBuilder: Execute DDL operations (for integration tests/runtime)\n */\n\nimport type { ForeignKeyAction } from '../../schema/types.js';\nimport type { SchemaGenerator } from '../../type/migration.js';\nimport type { NamingStrategy } from '../../type/namingStrategy.js';\nimport type { SqlQuerier } from '../../type/querier.js';\nimport { createSchemaGenerator } from '../schemaGenerator.js';\nimport { ColumnBuilder } from './columnBuilder.js';\nimport { splitSqlStatementsOnSemicolons } from './splitSqlStatements.js';\nimport { TableBuilder } from './tableBuilder.js';\nimport type {\n AnyMigrationOperation,\n IAlterTableBuilder,\n IColumnBuilder,\n IMigrationBuilder,\n ITableBuilder,\n RawSqlOperation,\n} from './types.js';\n\n/**\n * Builder for altering a table.\n * Delegates to parent builder for operation recording.\n */\nclass AlterTableBuilder implements IAlterTableBuilder {\n constructor(\n private readonly tableName: string,\n private readonly parentBuilder: IMigrationBuilder,\n ) {}\n\n addColumn(name: string, callback: (column: IColumnBuilder) => void): this {\n const builder = new ColumnBuilder(name, { category: 'string' });\n callback(builder);\n\n this.parentBuilder.recordOperationSync({\n type: 'addColumn',\n tableName: this.tableName,\n column: builder.build(),\n });\n return this;\n }\n\n dropColumn(name: string): this {\n this.parentBuilder.recordOperationSync({\n type: 'dropColumn',\n tableName: this.tableName,\n columnName: name,\n });\n return this;\n }\n\n renameColumn(oldName: string, newName: string): this {\n this.parentBuilder.recordOperationSync({\n type: 'renameColumn',\n tableName: this.tableName,\n oldName,\n newName,\n });\n return this;\n }\n\n alterColumn(name: string, callback: (column: IColumnBuilder) => void): this {\n const builder = new ColumnBuilder(name, { category: 'string' });\n callback(builder);\n\n this.parentBuilder.recordOperationSync({\n type: 'alterColumn',\n tableName: this.tableName,\n columnName: name,\n changes: builder.build(),\n });\n return this;\n }\n\n addIndex(columns: string[], options?: { name?: string; unique?: boolean }): this {\n const indexName = options?.name ?? `idx_${this.tableName}_${columns.join('_')}`;\n this.parentBuilder.recordOperationSync({\n type: 'createIndex',\n tableName: this.tableName,\n index: {\n name: indexName,\n columns,\n unique: options?.unique ?? false,\n },\n });\n return this;\n }\n\n dropIndex(name: string): this {\n this.parentBuilder.recordOperationSync({\n type: 'dropIndex',\n tableName: this.tableName,\n indexName: name,\n });\n return this;\n }\n\n addForeignKey(\n columns: string[],\n target: { table: string; columns: string[] },\n options?: { name?: string; onDelete?: ForeignKeyAction; onUpdate?: ForeignKeyAction },\n ): this {\n this.parentBuilder.recordOperationSync({\n type: 'addForeignKey',\n tableName: this.tableName,\n foreignKey: {\n name: options?.name,\n columns,\n referencesTable: target.table,\n referencesColumns: target.columns,\n onDelete: options?.onDelete ?? 'NO ACTION',\n onUpdate: options?.onUpdate ?? 'NO ACTION',\n },\n });\n return this;\n }\n\n dropForeignKey(name: string): this {\n this.parentBuilder.recordOperationSync({\n type: 'dropForeignKey',\n tableName: this.tableName,\n constraintName: name,\n });\n return this;\n }\n}\n\n/**\n * Records migration operations without executing them.\n * Use for migration code generation and dry-run scenarios.\n */\nexport class OperationRecorder implements IMigrationBuilder {\n protected readonly operations: AnyMigrationOperation[] = [];\n\n // ============================================================================\n // Table Operations\n // ============================================================================\n\n async createTable(name: string, callback: (table: ITableBuilder) => void): Promise<void> {\n const builder = new TableBuilder(name);\n callback(builder);\n\n this.recordOperationSync({\n type: 'createTable',\n table: builder.build(),\n });\n }\n\n async dropTable(name: string, options: { ifExists?: boolean; cascade?: boolean } = {}): Promise<void> {\n this.recordOperationSync({\n type: 'dropTable',\n tableName: name,\n ifExists: options.ifExists,\n cascade: options.cascade,\n });\n }\n\n async renameTable(oldName: string, newName: string): Promise<void> {\n this.recordOperationSync({\n type: 'renameTable',\n oldName,\n newName,\n });\n }\n\n async alterTable(name: string, callback: (table: IAlterTableBuilder) => void): Promise<void> {\n const builder = new AlterTableBuilder(name, this);\n callback(builder);\n }\n\n // ============================================================================\n // Column Operations\n // ============================================================================\n\n async addColumn(tableName: string, columnName: string, callback: (column: IColumnBuilder) => void): Promise<void> {\n const builder = new ColumnBuilder(columnName, { category: 'string' });\n callback(builder);\n\n this.recordOperationSync({\n type: 'addColumn',\n tableName,\n column: builder.build(),\n });\n }\n\n async dropColumn(tableName: string, columnName: string): Promise<void> {\n this.recordOperationSync({\n type: 'dropColumn',\n tableName,\n columnName,\n });\n }\n\n async alterColumn(tableName: string, columnName: string, callback: (column: IColumnBuilder) => void): Promise<void> {\n const builder = new ColumnBuilder(columnName, { category: 'string' });\n callback(builder);\n\n this.recordOperationSync({\n type: 'alterColumn',\n tableName,\n columnName,\n changes: builder.build(),\n });\n }\n\n async renameColumn(tableName: string, oldName: string, newName: string): Promise<void> {\n this.recordOperationSync({\n type: 'renameColumn',\n tableName,\n oldName,\n newName,\n });\n }\n\n // ============================================================================\n // Index Operations\n // ============================================================================\n\n async createIndex(\n tableName: string,\n columns: string[],\n options: { name?: string; unique?: boolean; where?: string } = {},\n ): Promise<void> {\n const indexName = options.name ?? `idx_${tableName}_${columns.join('_')}`;\n\n this.recordOperationSync({\n type: 'createIndex',\n tableName,\n index: {\n name: indexName,\n columns,\n unique: options.unique ?? false,\n where: options.where,\n },\n });\n }\n\n async dropIndex(tableName: string, indexName: string): Promise<void> {\n this.recordOperationSync({\n type: 'dropIndex',\n tableName,\n indexName,\n });\n }\n\n // ============================================================================\n // Foreign Key Operations\n // ============================================================================\n\n async addForeignKey(\n tableName: string,\n columns: string[],\n target: { table: string; columns: string[] },\n options: { name?: string; onDelete?: ForeignKeyAction; onUpdate?: ForeignKeyAction } = {},\n ): Promise<void> {\n this.recordOperationSync({\n type: 'addForeignKey',\n tableName,\n foreignKey: {\n name: options.name,\n columns,\n referencesTable: target.table,\n referencesColumns: target.columns,\n onDelete: options.onDelete ?? 'NO ACTION',\n onUpdate: options.onUpdate ?? 'NO ACTION',\n },\n });\n }\n\n async dropForeignKey(tableName: string, constraintName: string): Promise<void> {\n this.recordOperationSync({\n type: 'dropForeignKey',\n tableName,\n constraintName,\n });\n }\n\n // ============================================================================\n // Raw SQL\n // ============================================================================\n\n async raw(sql: string): Promise<void> {\n this.recordOperationSync({\n type: 'raw',\n sql,\n });\n }\n\n // ============================================================================\n // Operation Access\n // ============================================================================\n\n getOperations(): AnyMigrationOperation[] {\n return [...this.operations];\n }\n\n recordOperationSync(operation: AnyMigrationOperation): void {\n this.operations.push(operation);\n }\n}\n\n/**\n * Options for the migration builder.\n */\nexport interface MigrationBuilderOptions {\n /** Custom naming strategy for generated SQL */\n namingStrategy?: NamingStrategy;\n}\n\n/**\n * Executes DDL operations via a SQL querier.\n * Use for integration tests and runtime schema management.\n *\n * @example\n * ```typescript\n * const builder = new MigrationBuilder(querier);\n *\n * await builder.createTable('users', (t) => {\n * t.id();\n * t.string('name');\n * t.timestamps();\n * });\n * ```\n */\nexport class MigrationBuilder extends OperationRecorder {\n private readonly sqlGenerator: SchemaGenerator;\n\n constructor(\n private readonly querier: SqlQuerier,\n options: MigrationBuilderOptions = {},\n ) {\n super();\n const generator = createSchemaGenerator(querier.dialect, options.namingStrategy);\n if (!generator) {\n throw new TypeError(`Could not find a schema generator for dialect: ${querier.dialect.dialectName}`);\n }\n this.sqlGenerator = generator;\n }\n\n override recordOperationSync(operation: AnyMigrationOperation): void {\n super.recordOperationSync(operation);\n // Fire and forget execution - for sync contexts (AlterTableBuilder)\n void this.execute(operation);\n }\n\n override async raw(sql: string): Promise<void> {\n const operation: RawSqlOperation = {\n type: 'raw',\n sql,\n };\n this.operations.push(operation);\n await this.querier.run(sql);\n }\n\n // ============================================================================\n // Override async methods to execute immediately\n // ============================================================================\n\n override async createTable(name: string, callback: (table: ITableBuilder) => void): Promise<void> {\n const builder = new TableBuilder(name);\n callback(builder);\n\n const operation: AnyMigrationOperation = {\n type: 'createTable',\n table: builder.build(),\n };\n this.operations.push(operation);\n await this.execute(operation);\n }\n\n override async dropTable(name: string, options: { ifExists?: boolean; cascade?: boolean } = {}): Promise<void> {\n const operation: AnyMigrationOperation = {\n type: 'dropTable',\n tableName: name,\n ifExists: options.ifExists,\n cascade: options.cascade,\n };\n this.operations.push(operation);\n await this.execute(operation);\n }\n\n override async renameTable(oldName: string, newName: string): Promise<void> {\n const operation: AnyMigrationOperation = {\n type: 'renameTable',\n oldName,\n newName,\n };\n this.operations.push(operation);\n await this.execute(operation);\n }\n\n override async addColumn(\n tableName: string,\n columnName: string,\n callback: (column: IColumnBuilder) => void,\n ): Promise<void> {\n const builder = new ColumnBuilder(columnName, { category: 'string' });\n callback(builder);\n\n const operation: AnyMigrationOperation = {\n type: 'addColumn',\n tableName,\n column: builder.build(),\n };\n this.operations.push(operation);\n await this.execute(operation);\n }\n\n override async dropColumn(tableName: string, columnName: string): Promise<void> {\n const operation: AnyMigrationOperation = {\n type: 'dropColumn',\n tableName,\n columnName,\n };\n this.operations.push(operation);\n await this.execute(operation);\n }\n\n override async alterColumn(\n tableName: string,\n columnName: string,\n callback: (column: IColumnBuilder) => void,\n ): Promise<void> {\n const builder = new ColumnBuilder(columnName, { category: 'string' });\n callback(builder);\n\n const operation: AnyMigrationOperation = {\n type: 'alterColumn',\n tableName,\n columnName,\n changes: builder.build(),\n };\n this.operations.push(operation);\n await this.execute(operation);\n }\n\n override async renameColumn(tableName: string, oldName: string, newName: string): Promise<void> {\n const operation: AnyMigrationOperation = {\n type: 'renameColumn',\n tableName,\n oldName,\n newName,\n };\n this.operations.push(operation);\n await this.execute(operation);\n }\n\n override async createIndex(\n tableName: string,\n columns: string[],\n options: { name?: string; unique?: boolean; where?: string } = {},\n ): Promise<void> {\n const indexName = options.name ?? `idx_${tableName}_${columns.join('_')}`;\n\n const operation: AnyMigrationOperation = {\n type: 'createIndex',\n tableName,\n index: {\n name: indexName,\n columns,\n unique: options.unique ?? false,\n where: options.where,\n },\n };\n this.operations.push(operation);\n await this.execute(operation);\n }\n\n override async dropIndex(tableName: string, indexName: string): Promise<void> {\n const operation: AnyMigrationOperation = {\n type: 'dropIndex',\n tableName,\n indexName,\n };\n this.operations.push(operation);\n await this.execute(operation);\n }\n\n override async addForeignKey(\n tableName: string,\n columns: string[],\n target: { table: string; columns: string[] },\n options: { name?: string; onDelete?: ForeignKeyAction; onUpdate?: ForeignKeyAction } = {},\n ): Promise<void> {\n const operation: AnyMigrationOperation = {\n type: 'addForeignKey',\n tableName,\n foreignKey: {\n name: options.name,\n columns,\n referencesTable: target.table,\n referencesColumns: target.columns,\n onDelete: options.onDelete ?? 'NO ACTION',\n onUpdate: options.onUpdate ?? 'NO ACTION',\n },\n };\n this.operations.push(operation);\n await this.execute(operation);\n }\n\n override async dropForeignKey(tableName: string, constraintName: string): Promise<void> {\n const operation: AnyMigrationOperation = {\n type: 'dropForeignKey',\n tableName,\n constraintName,\n };\n this.operations.push(operation);\n await this.execute(operation);\n }\n\n // ============================================================================\n // Private Methods\n // ============================================================================\n\n private getCreateTableStatements(operation: Extract<AnyMigrationOperation, { type: 'createTable' }>): string[] {\n return this.sqlGenerator.generateCreateTableFromDefinition(operation.table);\n }\n\n private async execute(operation: AnyMigrationOperation): Promise<void> {\n if (operation.type === 'createTable') {\n for (const statement of this.getCreateTableStatements(operation)) {\n await this.querier.run(statement);\n }\n return;\n }\n\n const sql = this.operationToSql(operation);\n if (sql) {\n for (const statement of splitSqlStatementsOnSemicolons(sql)) {\n await this.querier.run(statement);\n }\n }\n }\n\n private operationToSql(operation: AnyMigrationOperation): string | undefined {\n switch (operation.type) {\n case 'createTable':\n // One line per statement in preview; execute() runs each separately (#87).\n return this.getCreateTableStatements(operation).join('\\n');\n case 'dropTable':\n return this.sqlGenerator.generateDropTableSql(operation.tableName, {\n ifExists: operation.ifExists,\n cascade: operation.cascade,\n });\n case 'renameTable':\n return this.sqlGenerator.generateRenameTableSql(operation.oldName, operation.newName);\n case 'addColumn':\n return this.sqlGenerator.generateAddColumnSql(operation.tableName, operation.column);\n case 'dropColumn':\n return this.sqlGenerator.generateDropColumnSql(operation.tableName, operation.columnName);\n case 'renameColumn':\n return this.sqlGenerator.generateRenameColumnSql(operation.tableName, operation.oldName, operation.newName);\n case 'alterColumn':\n return this.sqlGenerator.generateAlterColumnSql(operation.tableName, operation.columnName, operation.changes);\n case 'createIndex':\n return this.sqlGenerator.generateCreateIndexSql(operation.tableName, operation.index);\n case 'dropIndex':\n return this.sqlGenerator.generateDropIndexSql(operation.tableName, operation.indexName);\n case 'addForeignKey':\n return this.sqlGenerator.generateAddForeignKeySql(operation.tableName, operation.foreignKey);\n case 'dropForeignKey':\n return this.sqlGenerator.generateDropForeignKeySql(operation.tableName, operation.constraintName);\n case 'raw':\n return operation.sql;\n default:\n return undefined;\n }\n }\n}\n\n/**\n * Create an operation recorder for dry-run (recording only).\n * @deprecated Use `new OperationRecorder()` directly\n */\nexport function createDryRunBuilder(): OperationRecorder {\n return new OperationRecorder();\n}\n","import { stat } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport { createJiti } from 'jiti';\nimport type { Config } from '../type/index.js';\n\nexport async function loadConfig(customPath?: string): Promise<Config> {\n const jiti = createJiti(process.cwd());\n\n if (customPath) {\n const fullPath = resolve(process.cwd(), customPath);\n const exists = await stat(fullPath)\n .then(() => true)\n .catch(() => false);\n\n if (!exists) {\n throw new Error(`Could not find uql configuration file at ${customPath}`);\n }\n\n try {\n const config = await jiti.import(fullPath, { default: true });\n return config as Config;\n } catch (error) {\n throw new Error(`Could not load configuration file at ${customPath}: ${(error as Error).message}`);\n }\n }\n\n const configPaths = ['uql.config.ts', 'uql.config.js', 'uql.config.mjs', '.uqlrc.ts', '.uqlrc.js'];\n\n for (const configPath of configPaths) {\n const fullPath = resolve(process.cwd(), configPath);\n const exists = await stat(fullPath)\n .then(() => true)\n .catch(() => false);\n\n if (exists) {\n const config = await jiti.import(fullPath, { default: true });\n return config as Config;\n }\n }\n\n throw new Error(\n 'Could not find uql configuration file. Create a uql.config.ts or uql.config.js file in your project root.',\n );\n}\n","export function kebabCase(val: string): string {\n let resp = val.charAt(0).toLowerCase();\n for (let i = 1; i < val.length; ++i) {\n resp += val[i] === val[i].toUpperCase() ? '-' + val[i].toLowerCase() : val[i];\n }\n return resp;\n}\n\nexport function upperFirst(text: string): string {\n if (!text) return text;\n return text[0].toUpperCase() + text.slice(1);\n}\n\nexport function lowerFirst(text: string): string {\n if (!text) return text;\n return text[0].toLowerCase() + text.slice(1);\n}\n\nexport function snakeCase(val: string): string {\n if (val === null || val === undefined) return val as string;\n if (!val) return '';\n let resp = val.charAt(0).toLowerCase();\n for (let i = 1; i < val.length; ++i) {\n const char = val[i];\n const charLower = char.toLowerCase();\n if (char !== charLower && char === char.toUpperCase()) {\n resp += '_' + charLower;\n } else {\n resp += char;\n }\n }\n return resp;\n}\n\n/**\n * Convert a string to PascalCase (UpperCamelCase).\n * @example 'user_profile' -> 'UserProfile'\n * @example 'some-text' -> 'SomeText'\n */\nexport function pascalCase(str: string): string {\n if (!str) return '';\n return str\n .split(/[_\\s-]+/)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join('');\n}\n\n/**\n * Convert a string to camelCase.\n * @example 'user_profile' -> 'userProfile'\n * @example 'SomeText' -> 'someText'\n */\nexport function camelCase(str: string): string {\n const pascal = pascalCase(str);\n return pascal.charAt(0).toLowerCase() + pascal.slice(1);\n}\n\n/**\n * Simple singularize function for English words.\n * @example 'users' -> 'user'\n * @example 'categories' -> 'category'\n */\nexport function singularize(name: string): string {\n if (!name) return '';\n if (name.endsWith('ies')) {\n return name.slice(0, -3) + 'y';\n }\n if (name.endsWith('ses') || name.endsWith('xes') || name.endsWith('zes')) {\n return name.slice(0, -2);\n }\n if (name.endsWith('s') && !name.endsWith('ss')) {\n return name.slice(0, -1);\n }\n return name;\n}\n\n/**\n * Simple pluralize function for English words.\n * @example 'user' -> 'users'\n * @example 'category' -> 'categories'\n */\nexport function pluralize(name: string): string {\n if (!name) return '';\n if (name.endsWith('y') && name.length > 1 && !/[aeiou]/.test(name[name.length - 2])) {\n return name.slice(0, -1) + 'ies';\n }\n if (name.endsWith('s') || name.endsWith('x') || name.endsWith('z') || name.endsWith('ch') || name.endsWith('sh')) {\n return name + 'es';\n }\n return name + 's';\n}\n","/**\n * Entity Code Generator\n *\n * Generates TypeScript entity files from SchemaAST.\n * Supports:\n * - ES Module syntax\n * - TypeScript types\n * - Relations with proper decorators\n * - Indexes\n * - JSDoc comments for sync-added fields\n */\n\nimport { canonicalToColumnType, canonicalToTypeScript } from '../../schema/canonicalType.js';\nimport type { SchemaAST } from '../../schema/schemaAST.js';\nimport type { CanonicalType, ColumnNode, RelationshipNode, RelationshipType, TableNode } from '../../schema/types.js';\nimport { camelCase, pascalCase, singularize } from '../../util/string.util.js';\n\n/**\n * Options for entity code generation.\n */\nexport interface EntityCodeGeneratorOptions {\n /** Base import path for uql-orm (default: 'uql-orm') */\n uqlImportPath?: string;\n /** Whether to add JSDoc with @sync-added for generated fields */\n addSyncComments?: boolean;\n /** Custom class name transformer (default: PascalCase singularized) */\n classNameTransformer?: (tableName: string) => string;\n /** Custom property name transformer (default: camelCase) */\n propertyNameTransformer?: (columnName: string) => string;\n /** Whether to generate relation properties (default: true) */\n includeRelations?: boolean;\n /** Whether to include index decorators (default: true) */\n includeIndexes?: boolean;\n /** Custom singularize function */\n singularize?: (name: string) => string;\n}\n\n/**\n * Generated entity result.\n */\nexport interface GeneratedEntity {\n /** The entity class name */\n className: string;\n /** The table name */\n tableName: string;\n /** The generated TypeScript code */\n code: string;\n /** The suggested file name */\n fileName: string;\n}\n\n/**\n * Generates TypeScript entity code from SchemaAST.\n */\nexport class EntityCodeGenerator {\n private readonly options: Required<EntityCodeGeneratorOptions>;\n\n constructor(\n private readonly ast: SchemaAST,\n options: EntityCodeGeneratorOptions = {},\n ) {\n this.options = {\n uqlImportPath: options.uqlImportPath ?? 'uql-orm',\n addSyncComments: options.addSyncComments ?? true,\n classNameTransformer: options.classNameTransformer ?? this.defaultClassNameTransformer.bind(this),\n propertyNameTransformer: options.propertyNameTransformer ?? this.defaultPropertyNameTransformer.bind(this),\n includeRelations: options.includeRelations ?? true,\n includeIndexes: options.includeIndexes ?? true,\n singularize: options.singularize ?? this.defaultSingularize.bind(this),\n };\n }\n\n /**\n * Generate entities for all tables in the AST.\n */\n generateAll(): GeneratedEntity[] {\n const entities: GeneratedEntity[] = [];\n\n for (const table of this.ast.tables.values()) {\n entities.push(this.generateEntity(table));\n }\n\n return entities;\n }\n\n /**\n * Generate entity for a specific table.\n */\n generateForTable(tableName: string): GeneratedEntity | undefined {\n const table = this.ast.getTable(tableName);\n if (!table) return undefined;\n return this.generateEntity(table);\n }\n\n /**\n * Generate entity code for a table.\n */\n private generateEntity(table: TableNode): GeneratedEntity {\n const className = this.options.classNameTransformer(table.name);\n const fileName = `${className}.ts`;\n\n const imports = this.buildImports(table);\n const decorators = this.buildEntityDecorators(table);\n const fields = this.buildFields(table);\n const relations = this.options.includeRelations ? this.buildRelations(table) : '';\n\n const code = [imports, '', decorators, `export class ${className} {`, fields, relations, '}', ''].join('\\n');\n\n return {\n className,\n tableName: table.name,\n code,\n fileName,\n };\n }\n\n /**\n * Build import statements.\n */\n private buildImports(table: TableNode): string {\n const uqlImports = new Set<string>(['Entity', 'Field']);\n const relatedImports: string[] = [];\n\n // Check for Id decorator\n for (const col of table.columns.values()) {\n if (col.isPrimaryKey) {\n uqlImports.add('Id');\n }\n }\n\n // Check for relation decorators\n if (this.options.includeRelations) {\n for (const rel of [...table.incomingRelations, ...table.outgoingRelations]) {\n uqlImports.add(this.getRelationDecoratorName(rel.type));\n uqlImports.add('Relation');\n\n const relatedTable = rel.from.table === table ? rel.to.table : rel.from.table;\n const relatedClassName = this.options.classNameTransformer(relatedTable.name);\n if (!relatedImports.includes(relatedClassName)) {\n relatedImports.push(relatedClassName);\n }\n }\n }\n\n // Check for composite index decorators\n if (this.options.includeIndexes) {\n const compositeIndexes = this.ast.getTableIndexes(table.name).filter((idx) => idx.columns.length > 1);\n if (compositeIndexes.length > 0) {\n uqlImports.add('Index');\n }\n }\n\n let code = `import { ${Array.from(uqlImports).sort().join(', ')} } from '${this.options.uqlImportPath}';\\n`;\n\n // Add related entity imports\n for (const className of relatedImports.sort()) {\n code += `import { ${className} } from './${className}.js';\\n`;\n }\n\n return code;\n }\n\n /**\n * Build entity decorators.\n */\n private buildEntityDecorators(table: TableNode): string {\n const lines: string[] = [];\n\n // Add composite index decorators\n if (this.options.includeIndexes) {\n const compositeIndexes = this.ast.getTableIndexes(table.name).filter((idx) => idx.columns.length > 1);\n\n for (const idx of compositeIndexes) {\n const propNames = idx.columns.map((c) => `'${this.options.propertyNameTransformer(c.name)}'`).join(', ');\n const options: string[] = [];\n if (idx.name) options.push(`name: '${idx.name}'`);\n if (idx.unique) options.push('unique: true');\n\n const optStr = options.length > 0 ? `, { ${options.join(', ')} }` : '';\n lines.push(`@Index([${propNames}]${optStr})`);\n }\n }\n\n // Entity decorator\n lines.push(`@Entity({ name: '${table.name}' })`);\n\n return lines.join('\\n');\n }\n\n /**\n * Build field definitions.\n */\n private buildFields(table: TableNode): string {\n const lines: string[] = [];\n\n for (const col of table.columns.values()) {\n const fieldCode = this.buildField(col);\n lines.push(fieldCode);\n }\n\n return lines.join('\\n\\n');\n }\n\n /**\n * Build a single field definition.\n */\n private buildField(col: ColumnNode): string {\n const lines: string[] = [];\n const propertyName = this.options.propertyNameTransformer(col.name);\n const tsType = canonicalToTypeScript(col.type);\n\n // JSDoc comment if enabled\n if (this.options.addSyncComments) {\n lines.push(' /**');\n lines.push(` * @sync-added ${new Date().toISOString().split('T')[0]}`);\n lines.push(` * Column: ${col.name} (${this.formatTypeDescription(col.type)})`);\n if (col.comment) {\n lines.push(` * ${col.comment}`);\n }\n lines.push(' */');\n }\n\n // Decorator\n if (col.isPrimaryKey) {\n const idOptions = this.buildIdOptions(col);\n lines.push(` @Id(${idOptions})`);\n } else {\n const fieldOptions = this.buildFieldOptions(col);\n lines.push(` @Field(${fieldOptions})`);\n }\n\n // Property\n const nullable = col.nullable ? '?' : '';\n lines.push(` ${propertyName}${nullable}: ${tsType};`);\n\n return lines.join('\\n');\n }\n\n /**\n * Build Id decorator options.\n */\n private buildIdOptions(col: ColumnNode): string {\n const options: string[] = [];\n\n if (col.name !== 'id') {\n options.push(`name: '${col.name}'`);\n }\n\n return options.length > 0 ? `{ ${options.join(', ')} }` : '';\n }\n\n /**\n * Build Field decorator options.\n */\n private buildFieldOptions(col: ColumnNode): string {\n const options: string[] = [];\n\n // Column type\n const columnType = canonicalToColumnType(col.type);\n if (columnType) {\n options.push(`columnType: '${columnType}'`);\n }\n\n // Length\n if (col.type.length && col.type.category === 'string') {\n options.push(`length: ${col.type.length}`);\n }\n\n // Precision and scale\n if (col.type.precision) {\n options.push(`precision: ${col.type.precision}`);\n if (col.type.scale) {\n options.push(`scale: ${col.type.scale}`);\n }\n }\n\n // Nullable\n if (col.nullable) {\n options.push('nullable: true');\n }\n\n // Unique\n if (col.isUnique) {\n options.push('unique: true');\n }\n\n // Default value\n if (col.defaultValue !== undefined) {\n options.push(`defaultValue: ${this.formatDefaultValue(col.defaultValue)}`);\n }\n\n // Index (single column)\n if (this.options.includeIndexes) {\n const indexes = this.ast.getTableIndexes(col.table.name);\n const singleColIndex = indexes.find((idx) => idx.columns.length === 1 && idx.columns[0].name === col.name);\n\n if (singleColIndex) {\n options.push(`index: '${singleColIndex.name}'`);\n }\n }\n\n return options.length > 0 ? `{ ${options.join(', ')} }` : '';\n }\n\n /**\n * Build relation definitions.\n */\n private buildRelations(table: TableNode): string {\n const lines: string[] = [];\n\n // Outgoing relations (this table has FK)\n for (const rel of table.outgoingRelations) {\n const relCode = this.buildOutgoingRelation(rel, table);\n lines.push(relCode);\n }\n\n // Incoming relations (other tables have FK to this)\n for (const rel of table.incomingRelations) {\n const relCode = this.buildIncomingRelation(rel, table);\n lines.push(relCode);\n }\n\n if (lines.length > 0) {\n return '\\n' + lines.join('\\n\\n');\n }\n\n return '';\n }\n\n /**\n * Build outgoing relation (ManyToOne or OneToOne where this table has FK).\n */\n private buildOutgoingRelation(rel: RelationshipNode, table: TableNode): string {\n const lines: string[] = [];\n const relatedClassName = this.options.classNameTransformer(rel.to.table.name);\n\n // Try to derive property name from FK column name (e.g., author_id -> author)\n let propertyName = '';\n const firstCol = rel.from.columns[0]?.name;\n if (firstCol && (firstCol.toLowerCase().endsWith('_id') || firstCol.toLowerCase().endsWith('id'))) {\n const baseName = firstCol.replace(/_?id$/i, '');\n propertyName = this.options.propertyNameTransformer(baseName);\n } else {\n propertyName = this.options.propertyNameTransformer(this.options.singularize(rel.to.table.name));\n }\n\n const decoratorName = this.getRelationDecoratorName(rel.type);\n\n // JSDoc\n if (this.options.addSyncComments) {\n lines.push(' /**');\n lines.push(` * @sync-added ${new Date().toISOString().split('T')[0]}`);\n lines.push(` * Relation to ${rel.to.table.name} via ${rel.from.columns.map((c) => c.name).join(', ')}`);\n if (rel.confidence !== undefined && rel.confidence < 1.0) {\n lines.push(` * Inferred (${(rel.confidence * 100).toFixed(0)}% confidence)`);\n }\n lines.push(' */');\n }\n\n // Decorator\n lines.push(` @${decoratorName}({ entity: () => ${relatedClassName} })`);\n\n // Property\n lines.push(` ${propertyName}?: Relation<${relatedClassName}>;`);\n\n return lines.join('\\n');\n }\n\n /**\n * Build incoming relation (OneToMany where other tables have FK to this).\n */\n private buildIncomingRelation(rel: RelationshipNode, table: TableNode): string {\n const lines: string[] = [];\n const relatedClassName = this.options.classNameTransformer(rel.from.table.name);\n const propertyName = this.options.propertyNameTransformer(rel.from.table.name);\n const inverseType = this.ast.getInverseRelationType(rel.type);\n const decoratorName = this.getRelationDecoratorName(inverseType);\n\n // JSDoc\n if (this.options.addSyncComments) {\n lines.push(' /**');\n lines.push(` * @sync-added ${new Date().toISOString().split('T')[0]}`);\n lines.push(` * Inverse relation from ${rel.from.table.name}`);\n lines.push(' */');\n }\n\n // Decorator - includes references to property name\n const inverseProp = this.options.propertyNameTransformer(this.options.singularize(table.name));\n lines.push(` @${decoratorName}({ entity: () => ${relatedClassName}, references: '${inverseProp}' })`);\n\n // Property\n if (inverseType === 'OneToMany' || inverseType === 'ManyToMany') {\n lines.push(` ${propertyName}?: Relation<${relatedClassName}[]>;`);\n } else {\n lines.push(` ${propertyName}?: Relation<${relatedClassName}>;`);\n }\n\n return lines.join('\\n');\n }\n\n // ============================================================================\n // Helper Methods\n // ============================================================================\n\n /**\n * Get decorator name for relation type.\n */\n private getRelationDecoratorName(type: RelationshipType): string {\n switch (type) {\n case 'OneToOne':\n return 'OneToOne';\n case 'OneToMany':\n return 'OneToMany';\n case 'ManyToOne':\n return 'ManyToOne';\n case 'ManyToMany':\n return 'ManyToMany';\n }\n }\n\n /**\n * Format type for description.\n */\n private formatTypeDescription(type: CanonicalType): string {\n let desc = type.category.toUpperCase();\n if (type.size) desc = `${type.size.toUpperCase()}${desc}`;\n if (type.length) desc += `(${type.length})`;\n if (type.precision) {\n desc += `(${type.precision}`;\n if (type.scale) desc += `,${type.scale}`;\n desc += ')';\n }\n if (type.unsigned) desc += ' UNSIGNED';\n return desc;\n }\n\n /**\n * Format default value for code.\n */\n private formatDefaultValue(value: unknown): string {\n if (typeof value === 'string') {\n // Check for SQL expressions\n if (\n value.includes('(') ||\n value.toUpperCase() === 'CURRENT_TIMESTAMP' ||\n value.toUpperCase().includes('NEXTVAL')\n ) {\n return `'${value}'`; // Keep as string for expressions\n }\n return `'${value.replace(/'/g, \"\\\\'\")}'`;\n }\n if (typeof value === 'boolean') {\n return value.toString();\n }\n if (typeof value === 'number') {\n return value.toString();\n }\n if (value === null) {\n return 'null';\n }\n return JSON.stringify(value);\n }\n\n /**\n * Default class name transformer: table_name -> TableName (PascalCase, singular).\n */\n private defaultClassNameTransformer(tableName: string): string {\n const singular = this.options.singularize(tableName);\n return this.toPascalCase(singular);\n }\n\n /**\n * Default property name transformer: column_name -> columnName (camelCase).\n */\n private defaultPropertyNameTransformer(name: string): string {\n return this.toCamelCase(name);\n }\n\n /**\n * Convert to PascalCase (delegates to shared utility).\n */\n private toPascalCase(str: string): string {\n return pascalCase(str);\n }\n\n /**\n * Convert to camelCase (delegates to shared utility).\n */\n private toCamelCase(str: string): string {\n return camelCase(str);\n }\n\n /**\n * Default singularize function (delegates to shared utility).\n */\n private defaultSingularize(name: string): string {\n return singularize(name);\n }\n}\n\n/**\n * Create an EntityCodeGenerator from SchemaAST.\n */\nexport function createEntityCodeGenerator(ast: SchemaAST, options?: EntityCodeGeneratorOptions): EntityCodeGenerator {\n return new EntityCodeGenerator(ast, options);\n}\n","/**\n * Entity Merger\n *\n * Merges generated entity code with existing TypeScript entity files.\n * Uses string-based parsing to add new fields with JSDoc comments.\n */\n\nimport { canonicalToColumnType, canonicalToTypeScript } from '../../schema/canonicalType.js';\nimport type { CanonicalType, ColumnNode, RelationshipNode } from '../../schema/types.js';\nimport { camelCase, pascalCase, singularize } from '../../util/string.util.js';\n\n/**\n * Options for entity merging.\n */\nexport interface EntityMergerOptions {\n /** Add JSDoc @sync-added comments to new fields */\n addSyncComments?: boolean;\n /** Mark removed fields with @deprecated instead of deleting */\n markRemovedAsDeprecated?: boolean;\n /** Custom property name transformer */\n propertyNameTransformer?: (columnName: string) => string;\n}\n\n/**\n * Represents a field to add to an entity.\n */\nexport interface FieldToAdd {\n column: ColumnNode;\n propertyName: string;\n isRelation?: boolean;\n relation?: RelationshipNode;\n}\n\n/**\n * Represents a field to mark as deprecated.\n */\nexport interface FieldToDeprecate {\n propertyName: string;\n reason: string;\n}\n\n/**\n * Result of entity merge operation.\n */\nexport interface MergeResult {\n /** The merged source code */\n code: string;\n /** Number of fields added */\n fieldsAdded: number;\n /** Number of fields marked deprecated */\n fieldsDeprecated: number;\n /** Whether the file was modified */\n modified: boolean;\n}\n\n/**\n * Merges new fields from database schema into existing entity files.\n */\nexport class EntityMerger {\n private readonly options: Required<EntityMergerOptions>;\n\n constructor(options: EntityMergerOptions = {}) {\n this.options = {\n addSyncComments: options.addSyncComments ?? true,\n markRemovedAsDeprecated: options.markRemovedAsDeprecated ?? true,\n propertyNameTransformer: options.propertyNameTransformer ?? this.defaultPropertyNameTransformer.bind(this),\n };\n }\n\n /**\n * Merge new fields into existing entity source code.\n */\n merge(existingCode: string, fieldsToAdd: FieldToAdd[], fieldsToDeprecate: FieldToDeprecate[] = []): MergeResult {\n let code = existingCode;\n let fieldsAdded = 0;\n let fieldsDeprecated = 0;\n\n // Find the existing property names to avoid duplicates\n const existingProps = this.extractPropertyNames(code);\n\n // Filter out fields that already exist\n const newFields = fieldsToAdd.filter((f) => !existingProps.has(f.propertyName));\n\n // Find the position to insert new fields (before closing brace)\n const insertPosition = this.findInsertPosition(code);\n if (insertPosition === -1) {\n return { code, fieldsAdded: 0, fieldsDeprecated: 0, modified: false };\n }\n\n // Generate code for new fields\n const newFieldsCode = this.generateFieldsCode(newFields);\n\n if (newFieldsCode) {\n // Insert the new fields\n code = code.slice(0, insertPosition) + newFieldsCode + code.slice(insertPosition);\n fieldsAdded = newFields.length;\n }\n\n // Mark fields as deprecated\n if (this.options.markRemovedAsDeprecated) {\n for (const field of fieldsToDeprecate) {\n const deprecatedCode = this.markFieldAsDeprecated(code, field);\n if (deprecatedCode !== code) {\n code = deprecatedCode;\n fieldsDeprecated++;\n }\n }\n }\n\n return {\n code,\n fieldsAdded,\n fieldsDeprecated,\n modified: fieldsAdded > 0 || fieldsDeprecated > 0,\n };\n }\n\n /**\n * Extract existing property names from entity code.\n */\n private extractPropertyNames(code: string): Set<string> {\n const props = new Set<string>();\n\n // Match property declarations: propertyName?: Type;\n const regex = /^\\s*(?:readonly\\s+)?(\\w+)\\s*[?!]?\\s*:/gm;\n\n let match = regex.exec(code);\n while (match !== null) {\n props.add(match[1]);\n match = regex.exec(code);\n }\n\n return props;\n }\n\n /**\n * Find the position to insert new fields (before the last closing brace).\n */\n private findInsertPosition(code: string): number {\n const lines = code.split('\\n');\n let braceCount = 0;\n let inClass = false;\n let lastPropertyLine = -1;\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n\n if (line.includes('class ')) {\n inClass = true;\n }\n\n if (!inClass) continue;\n\n braceCount += this.countBraces(line);\n\n if (/^\\s*(?:@\\w+|readonly\\s+|\\w+\\s*[?!]?:)/.test(line)) {\n lastPropertyLine = i;\n }\n\n if (braceCount !== 0) continue;\n\n // Found the closing brace — calculate insertion position\n const insertLineIndex = lastPropertyLine >= 0 ? lastPropertyLine + 1 : i;\n let pos = 0;\n for (let j = 0; j < insertLineIndex; j++) {\n pos += lines[j].length + 1;\n }\n return pos;\n }\n\n return -1;\n }\n\n /**\n * Count net brace depth change in a line.\n */\n private countBraces(line: string): number {\n let count = 0;\n for (const char of line) {\n if (char === '{') count++;\n if (char === '}') count--;\n }\n return count;\n }\n\n /**\n * Generate code for new fields.\n */\n private generateFieldsCode(fields: FieldToAdd[]): string {\n if (fields.length === 0) return '';\n\n const lines: string[] = [''];\n\n for (const field of fields) {\n if (field.isRelation && field.relation) {\n lines.push(...this.generateRelationField(field));\n } else {\n lines.push(...this.generateColumnField(field));\n }\n lines.push('');\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Generate code for a column field.\n */\n private generateColumnField(field: FieldToAdd): string[] {\n const lines: string[] = [];\n const col = field.column;\n const tsType = canonicalToTypeScript(col.type);\n\n // JSDoc comment\n if (this.options.addSyncComments) {\n lines.push(' /**');\n lines.push(` * @sync-added ${new Date().toISOString().split('T')[0]}`);\n lines.push(` * Column discovered in database but not in entity.`);\n lines.push(` * Type: ${this.formatTypeDescription(col.type)}, Nullable: ${col.nullable}`);\n lines.push(' */');\n }\n\n // Decorator\n if (col.isPrimaryKey) {\n lines.push(` @Id()`);\n } else {\n const fieldOptions = this.buildFieldOptions(col);\n lines.push(` @Field(${fieldOptions})`);\n }\n\n // Property\n const nullable = col.nullable ? '?' : '';\n lines.push(` ${field.propertyName}${nullable}: ${tsType};`);\n\n return lines;\n }\n\n /**\n * Generate code for a relation field.\n */\n private generateRelationField(field: FieldToAdd): string[] {\n const lines: string[] = [];\n const rel = field.relation;\n if (!rel) return lines;\n\n // Determine related table and decorator\n const isOutgoing = rel.from.columns.some((c) => c.name === field.column.name);\n const relatedTable = isOutgoing ? rel.to.table : rel.from.table;\n const decoratorName = this.getRelationDecoratorName(rel.type, !isOutgoing);\n\n const relatedClassName = this.toPascalCase(this.singularize(relatedTable.name));\n\n // JSDoc comment\n if (this.options.addSyncComments) {\n lines.push(' /**');\n lines.push(` * @sync-added ${new Date().toISOString().split('T')[0]}`);\n lines.push(` * Foreign key relation detected: references \"${relatedTable.name}\"`);\n lines.push(' */');\n }\n\n // Decorator\n lines.push(` @${decoratorName}({ entity: () => ${relatedClassName} })`);\n\n // Property\n const isArray = decoratorName === 'OneToMany' || decoratorName === 'ManyToMany';\n const typeStr = isArray ? `Relation<${relatedClassName}[]>` : `Relation<${relatedClassName}>`;\n lines.push(` ${field.propertyName}?: ${typeStr};`);\n\n return lines;\n }\n\n /**\n * Mark a field as deprecated in the source code.\n */\n private markFieldAsDeprecated(code: string, field: FieldToDeprecate): string {\n // Find the property declaration\n const propRegex = new RegExp(`(^\\\\s*)(@\\\\w+.*?\\\\n\\\\s*)*?(${field.propertyName}\\\\s*[?!]?\\\\s*:)`, 'm');\n const match = propRegex.exec(code);\n\n if (!match) return code;\n\n // Check if already has @deprecated\n const beforeMatch = code.slice(Math.max(0, match.index - 100), match.index);\n if (beforeMatch.includes('@deprecated')) return code;\n\n // Add @deprecated JSDoc\n const indent = match[1] || ' ';\n const deprecationComment = [\n `${indent}/**`,\n `${indent} * @deprecated ${field.reason}`,\n `${indent} * @sync-removed ${new Date().toISOString().split('T')[0]}`,\n `${indent} */`,\n '',\n ].join('\\n');\n\n return code.slice(0, match.index) + deprecationComment + code.slice(match.index);\n }\n\n /**\n * Build Field decorator options string.\n */\n private buildFieldOptions(col: ColumnNode): string {\n const options: string[] = [];\n\n const columnType = canonicalToColumnType(col.type);\n if (columnType) {\n options.push(`columnType: '${columnType}'`);\n }\n\n if (col.type.length && col.type.category === 'string') {\n options.push(`length: ${col.type.length}`);\n }\n\n if (col.type.precision !== undefined) {\n options.push(`precision: ${col.type.precision}`);\n }\n\n if (col.type.scale !== undefined) {\n options.push(`scale: ${col.type.scale}`);\n }\n\n if (col.nullable) {\n options.push('nullable: true');\n }\n\n return options.length > 0 ? `{ ${options.join(', ')} }` : '';\n }\n\n /**\n * Format type for description.\n */\n private formatTypeDescription(type: CanonicalType): string {\n let desc = type.category.toUpperCase();\n if (type.size) desc = `${type.size.toUpperCase()}${desc}`;\n if (type.length) desc += `(${type.length})`;\n if (type.precision) {\n desc += `(${type.precision}`;\n if (type.scale) desc += `,${type.scale}`;\n desc += ')';\n }\n return desc;\n }\n\n /**\n * Get relation decorator name.\n */\n private getRelationDecoratorName(type: string, inverse: boolean): string {\n if (inverse) {\n if (type === 'ManyToOne') return 'OneToMany';\n if (type === 'OneToMany') return 'ManyToOne';\n }\n return type;\n }\n\n /**\n * Default property name transformer (delegates to shared utility).\n */\n private defaultPropertyNameTransformer(columnName: string): string {\n return camelCase(columnName);\n }\n\n /**\n * Convert to PascalCase (delegates to shared utility).\n */\n private toPascalCase(str: string): string {\n return pascalCase(str);\n }\n\n /**\n * Singularize (delegates to shared utility).\n */\n private singularize(name: string): string {\n return singularize(name);\n }\n}\n\n/**\n * Create an EntityMerger instance.\n */\nexport function createEntityMerger(options?: EntityMergerOptions): EntityMerger {\n return new EntityMerger(options);\n}\n","/**\n * Migration Code Generator\n *\n * Generates TypeScript migration code from SchemaDiff.\n * This enables auto-generating migrations from entity changes.\n */\n\nimport type { ColumnSchema, ForeignKeySchema, IndexSchema, SchemaDiff } from '../../type/index.js';\n\nexport interface MigrationCodeOptions {\n /** Indentation string (default: 2 spaces) */\n indent?: string;\n /** Whether to include comments explaining changes */\n includeComments?: boolean;\n}\n\nexport interface GeneratedMigration {\n /** The up migration code */\n up: string;\n /** The down migration code */\n down: string;\n /** Human-readable description of changes */\n description: string;\n}\n\n/**\n * Generates TypeScript migration code from schema diffs.\n */\nexport class MigrationCodeGenerator {\n private readonly indent: string;\n private readonly includeComments: boolean;\n\n constructor(options: MigrationCodeOptions = {}) {\n this.indent = options.indent ?? ' ';\n this.includeComments = options.includeComments ?? true;\n }\n\n /**\n * Generate migration code from a single SchemaDiff.\n */\n generate(diff: SchemaDiff): GeneratedMigration {\n const description = this.generateDescription(diff);\n\n if (diff.type === 'create') {\n return {\n up: this.generateCreateTable(diff),\n down: this.generateDropTable(diff.tableName),\n description,\n };\n }\n\n if (diff.type === 'drop') {\n return {\n up: this.generateDropTable(diff.tableName),\n down: '// Cannot auto-generate: original table structure unknown',\n description,\n };\n }\n\n // alter\n return {\n up: this.generateAlterUp(diff),\n down: this.generateAlterDown(diff),\n description,\n };\n }\n\n /**\n * Generate migration code from multiple diffs.\n */\n generateAll(diffs: SchemaDiff[]): GeneratedMigration {\n const ups: string[] = [];\n const downs: string[] = [];\n const descriptions: string[] = [];\n\n for (const diff of diffs) {\n const result = this.generate(diff);\n ups.push(result.up);\n downs.push(result.down);\n descriptions.push(result.description);\n }\n\n return {\n up: ups.join('\\n\\n'),\n down: downs.reverse().join('\\n\\n'), // Reverse for correct rollback order\n description: descriptions.join('; '),\n };\n }\n\n /**\n * Generate a complete migration file template.\n */\n generateFile(diffs: SchemaDiff[], name?: string): string {\n const { up, down, description } = this.generateAll(diffs);\n const timestamp = new Date()\n .toISOString()\n .replace(/[-:T.Z]/g, '')\n .slice(0, 14);\n const migrationName = name ?? `migration_${timestamp}`;\n\n return `/**\n * Migration: ${migrationName}\n * ${description}\n *\n * Generated at: ${new Date().toISOString()}\n */\n\nimport type { IMigrationBuilder } from 'uql-orm';\n\nexport async function up(builder: IMigrationBuilder): Promise<void> {\n${this.indentBlock(up, 1)}\n}\n\nexport async function down(builder: IMigrationBuilder): Promise<void> {\n${this.indentBlock(down, 1)}\n}\n`;\n }\n\n // ===========================================================================\n // Private: Code Generation\n // ===========================================================================\n\n private generateCreateTable(diff: SchemaDiff): string {\n const columns = diff.columnsToAdd ?? [];\n const lines: string[] = [];\n\n lines.push(`await builder.createTable('${diff.tableName}', (table) => {`);\n\n for (const col of columns) {\n lines.push(`${this.indent}${this.generateColumnCall(col)};`);\n }\n\n // Add indexes if any\n for (const idx of diff.indexesToAdd ?? []) {\n lines.push(`${this.indent}${this.generateIndexCall(idx)};`);\n }\n\n lines.push('});');\n\n return lines.join('\\n');\n }\n\n private generateDropTable(tableName: string): string {\n return `await builder.dropTable('${tableName}');`;\n }\n\n private generateAlterUp(diff: SchemaDiff): string {\n const lines: string[] = [];\n\n // Add columns\n for (const col of diff.columnsToAdd ?? []) {\n lines.push(this.generateAddColumn(diff.tableName, col));\n }\n\n // Alter columns\n for (const { to } of diff.columnsToAlter ?? []) {\n lines.push(this.generateAlterColumn(diff.tableName, to));\n }\n\n // Drop columns\n for (const colName of diff.columnsToDrop ?? []) {\n lines.push(`await builder.dropColumn('${diff.tableName}', '${colName}');`);\n }\n\n // Add indexes\n for (const idx of diff.indexesToAdd ?? []) {\n lines.push(this.generateCreateIndex(diff.tableName, idx));\n }\n\n // Drop indexes\n for (const idxName of diff.indexesToDrop ?? []) {\n lines.push(`await builder.dropIndex('${diff.tableName}', '${idxName}');`);\n }\n\n // Add foreign keys\n for (const fk of diff.foreignKeysToAdd ?? []) {\n lines.push(this.generateAddForeignKey(diff.tableName, fk));\n }\n\n // Drop foreign keys\n for (const fkName of diff.foreignKeysToDrop ?? []) {\n lines.push(`await builder.dropForeignKey('${diff.tableName}', '${fkName}');`);\n }\n\n return lines.join('\\n');\n }\n\n private generateAlterDown(diff: SchemaDiff): string {\n const lines: string[] = [];\n\n // Reverse: drop added columns\n for (const col of diff.columnsToAdd ?? []) {\n lines.push(`await builder.dropColumn('${diff.tableName}', '${col.name}');`);\n }\n\n // Reverse: restore altered columns\n for (const { from } of diff.columnsToAlter ?? []) {\n lines.push(this.generateAlterColumn(diff.tableName, from));\n }\n\n // Reverse: re-add dropped columns (if we have the schema)\n // Note: This requires the original column definition\n if (diff.columnsToDrop?.length) {\n lines.push(`// TODO: Re-add dropped columns: ${diff.columnsToDrop.join(', ')}`);\n }\n\n // Reverse: drop added indexes\n for (const idx of diff.indexesToAdd ?? []) {\n lines.push(`await builder.dropIndex('${diff.tableName}', '${idx.name}');`);\n }\n\n // Reverse: re-add dropped indexes\n if (diff.indexesToDrop?.length) {\n lines.push(`// TODO: Re-add dropped indexes: ${diff.indexesToDrop.join(', ')}`);\n }\n\n // Reverse: drop added foreign keys\n for (const fk of diff.foreignKeysToAdd ?? []) {\n if (fk.name) {\n lines.push(`await builder.dropForeignKey('${diff.tableName}', '${fk.name}');`);\n }\n }\n\n // Reverse: re-add dropped foreign keys\n if (diff.foreignKeysToDrop?.length) {\n lines.push(`// TODO: Re-add dropped foreign keys: ${diff.foreignKeysToDrop.join(', ')}`);\n }\n\n return lines.join('\\n');\n }\n\n private generateAddColumn(tableName: string, col: ColumnSchema): string {\n const options = this.generateColumnOptions(col);\n return `await builder.addColumn('${tableName}', '${col.name}', (col) => col${options});`;\n }\n\n private generateAlterColumn(tableName: string, col: ColumnSchema): string {\n const options = this.generateColumnOptions(col);\n return `await builder.alterColumn('${tableName}', '${col.name}', (col) => col${options});`;\n }\n\n private generateCreateIndex(tableName: string, idx: IndexSchema): string {\n const cols = idx.columns.map((c) => `'${c}'`).join(', ');\n const opts: string[] = [];\n if (idx.name) opts.push(`name: '${idx.name}'`);\n if (idx.unique) opts.push('unique: true');\n const optsStr = opts.length ? `, { ${opts.join(', ')} }` : '';\n return `await builder.createIndex('${tableName}', [${cols}]${optsStr});`;\n }\n\n private generateAddForeignKey(tableName: string, fk: ForeignKeySchema): string {\n const cols = fk.columns.map((c) => `'${c}'`).join(', ');\n const refCols = fk.referencedColumns.map((c: string) => `'${c}'`).join(', ');\n const opts: string[] = [];\n if (fk.name) opts.push(`name: '${fk.name}'`);\n if (fk.onDelete && fk.onDelete !== 'NO ACTION') opts.push(`onDelete: '${fk.onDelete}'`);\n if (fk.onUpdate && fk.onUpdate !== 'NO ACTION') opts.push(`onUpdate: '${fk.onUpdate}'`);\n const optsStr = opts.length ? `, { ${opts.join(', ')} }` : '';\n return `await builder.addForeignKey('${tableName}', [${cols}], { table: '${fk.referencedTable}', columns: [${refCols}] }${optsStr});`;\n }\n\n // ===========================================================================\n // Private: Column Call Generation\n // ===========================================================================\n\n private generateColumnCall(col: ColumnSchema): string {\n const method = this.getColumnMethod(col);\n const options = this.generateColumnOptionsObject(col);\n return `table.${method}('${col.name}'${options})`;\n }\n\n private generateIndexCall(idx: IndexSchema): string {\n const cols = idx.columns.map((c) => `'${c}'`).join(', ');\n if (idx.unique) {\n return `table.unique([${cols}], '${idx.name}')`;\n }\n return `table.index([${cols}], '${idx.name}')`;\n }\n\n private getColumnMethod(col: ColumnSchema): string {\n const type = col.type as string;\n\n // Check for auto-increment primary key → id()\n if (col.isPrimaryKey && col.isAutoIncrement) {\n return 'id';\n }\n\n // Map type string to method name\n const typeMap: Record<string, string> = {\n integer: 'integer',\n int: 'integer',\n bigint: 'bigint',\n smallint: 'smallint',\n float: 'float',\n double: 'double',\n decimal: 'decimal',\n numeric: 'decimal',\n varchar: 'string',\n char: 'char',\n text: 'text',\n boolean: 'boolean',\n bool: 'boolean',\n date: 'date',\n time: 'time',\n timestamp: 'timestamp',\n timestamptz: 'timestamptz',\n json: 'json',\n jsonb: 'jsonb',\n uuid: 'uuid',\n blob: 'blob',\n bytea: 'blob',\n vector: 'vector',\n };\n\n const lowerType = type.toLowerCase().replace(/\\(.*\\)/, ''); // Remove (255) etc\n return typeMap[lowerType] ?? 'string';\n }\n\n private generateColumnOptionsObject(col: ColumnSchema): string {\n const opts: string[] = [];\n\n // Type-specific options\n if (col.length !== undefined && col.length !== 255) {\n opts.push(`length: ${col.length}`);\n }\n if (col.precision !== undefined) {\n opts.push(`precision: ${col.precision}`);\n }\n if (col.scale !== undefined) {\n opts.push(`scale: ${col.scale}`);\n }\n\n // Common options (only include non-defaults)\n if (col.nullable) {\n opts.push('nullable: true');\n }\n if (col.isUnique && !col.isPrimaryKey) {\n opts.push('unique: true');\n }\n if (col.isPrimaryKey && !col.isAutoIncrement) {\n opts.push('primaryKey: true');\n }\n if (col.defaultValue !== undefined) {\n opts.push(`defaultValue: ${this.formatValue(col.defaultValue)}`);\n }\n\n if (opts.length === 0) return '';\n return `, { ${opts.join(', ')} }`;\n }\n\n private generateColumnOptions(col: ColumnSchema): string {\n const parts: string[] = [];\n\n if (!col.nullable) {\n parts.push('.notNullable()');\n }\n if (col.isUnique) {\n parts.push('.unique()');\n }\n if (col.defaultValue !== undefined) {\n parts.push(`.defaultValue(${this.formatValue(col.defaultValue)})`);\n }\n\n return parts.join('');\n }\n\n private formatValue(value: unknown): string {\n if (value === null) return 'null';\n if (typeof value === 'string') {\n // Check for SQL expressions\n if (\n value.toUpperCase().includes('CURRENT_TIMESTAMP') ||\n value.includes('()') ||\n value.toUpperCase().includes('NOW')\n ) {\n return `t.raw('${value}')`;\n }\n return `'${value.replace(/'/g, \"\\\\'\")}'`;\n }\n if (typeof value === 'boolean') return String(value);\n if (typeof value === 'number') return String(value);\n return JSON.stringify(value);\n }\n\n // ===========================================================================\n // Private: Utilities\n // ===========================================================================\n\n private generateDescription(diff: SchemaDiff): string {\n const parts: string[] = [];\n\n if (diff.type === 'create') {\n parts.push(`Create table '${diff.tableName}'`);\n } else if (diff.type === 'drop') {\n parts.push(`Drop table '${diff.tableName}'`);\n } else {\n if (diff.columnsToAdd?.length) {\n parts.push(`Add ${diff.columnsToAdd.length} column(s)`);\n }\n if (diff.columnsToAlter?.length) {\n parts.push(`Alter ${diff.columnsToAlter.length} column(s)`);\n }\n if (diff.columnsToDrop?.length) {\n parts.push(`Drop ${diff.columnsToDrop.length} column(s)`);\n }\n }\n\n return parts.join(', ') || `Alter table '${diff.tableName}'`;\n }\n\n private indentBlock(code: string, level: number): string {\n const prefix = this.indent.repeat(level);\n return code\n .split('\\n')\n .map((line) => (line.trim() ? prefix + line : line))\n .join('\\n');\n }\n}\n\n/**\n * Factory function to create a MigrationCodeGenerator.\n */\nexport function createMigrationCodeGenerator(options?: MigrationCodeOptions): MigrationCodeGenerator {\n return new MigrationCodeGenerator(options);\n}\n","/**\n * Source code generation for default-export SQL migrations (`SqlQuerier` / `uql-migrate`).\n */\n\nexport type SqlMigrationModuleOptions = {\n migrationName: string;\n createdAt: Date;\n /** Extra lines in the file header comment (without leading ` * `). */\n docExtraLines?: string[];\n /** Indented body inside `async up` (including newlines). */\n upInner: string;\n /** Indented body inside `async down` (including newlines). */\n downInner: string;\n};\n\n/**\n * Emit one `await querier.run(...)` line for entity-generated migrations.\n * Uses `JSON.stringify` so SQL with backticks (SQLite/LibSQL), quotes, `${`, etc. stays valid TS source.\n */\nexport function emitSqlRunCall(sql: string): string {\n return /*ts*/ ` await querier.run(${JSON.stringify(sql)});`;\n}\n\n/** Indented `up`/`down` body: one `await querier.run(...)` per SQL string (entity-generated migrations, #87). */\nexport function emitSqlRunCalls(statements: string[]): string {\n return statements.map(emitSqlRunCall).join('\\n');\n}\n\n/** Body for `up` in a manual (empty) migration scaffold. */\nexport const EMPTY_MANUAL_MIGRATION_UP_INNER = ` // Add your migration logic here.\n // Use one await querier.run(\"...\") per SQL statement when possible (same style as generate:entities).\n // Example (Postgres):\n // await querier.run(\"CREATE TABLE \\\\\"users\\\\\" (\\\\\"id\\\\\" SERIAL PRIMARY KEY);\");\n`;\n\n/** Body for `down` in a manual (empty) migration scaffold. */\nexport const EMPTY_MANUAL_MIGRATION_DOWN_INNER = ` // Add your rollback logic here.\n // await querier.run(\"DROP TABLE IF EXISTS \\\\\"users\\\\\";\");\n`;\n\n/**\n * Full contents of a `export default { async up/down(querier) { ... } }` migration module.\n */\nexport function buildSqlQuerierMigrationModule(options: SqlMigrationModuleOptions): string {\n const iso = options.createdAt.toISOString();\n const extra = options.docExtraLines?.map((line) => `\\n * ${line}`).join('') ?? '';\n\n return /*ts*/ `import type { SqlQuerier } from 'uql-orm/migrate';\n\n/**\n * Migration: ${options.migrationName}\n * Created: ${iso}${extra}\n */\nexport default {\n async up(querier: SqlQuerier): Promise<void> {\n${options.upInner}\n },\n\n async down(querier: SqlQuerier): Promise<void> {\n${options.downInner}\n },\n};\n`;\n}\n","/**\n * Smart Relation Detector\n *\n * Uses heuristics and schema analysis to detect relationships between tables:\n * - Explicit foreign keys (highest confidence)\n * - Junction tables for ManyToMany\n * - Unique FK columns for OneToOne\n */\n\nimport type { SchemaAST } from '../../schema/schemaAST.js';\nimport type { DetectedRelation } from '../../schema/types.js';\nimport { singularize } from '../../util/string.util.js';\n\n/**\n * Configuration for relation detection.\n */\nexport interface RelationDetectorOptions {\n /** Minimum confidence threshold (0-1) to include in results */\n minConfidence?: number;\n /** Custom singularize function */\n singularize?: (name: string) => string;\n}\n\n/**\n * Detects relationships in a SchemaAST using multiple heuristics.\n */\nexport class SmartRelationDetector {\n private readonly options: Required<RelationDetectorOptions>;\n\n constructor(\n private readonly ast: SchemaAST,\n options: RelationDetectorOptions = {},\n ) {\n this.options = {\n minConfidence: options.minConfidence ?? 0.5,\n singularize: options.singularize ?? this.defaultSingularize.bind(this),\n };\n }\n\n /**\n * Detect all relationships in the schema.\n */\n detectAll(): DetectedRelation[] {\n const relations: DetectedRelation[] = [];\n\n // 1. Add explicit FK relationships (confidence: 1.0)\n for (const rel of this.ast.relationships) {\n relations.push({\n type: rel.type,\n from: {\n table: rel.from.table,\n columns: rel.from.columns,\n },\n to: {\n table: rel.to.table,\n columns: rel.to.columns,\n },\n through: rel.through,\n confidence: 1.0,\n source: 'explicit_fk',\n });\n }\n\n // 2. Detect junction tables (ManyToMany)\n const junctionRelations = this.detectJunctionTables();\n relations.push(...junctionRelations);\n\n // 3. Detect unique FK -> OneToOne upgrades\n const oneToOneUpgrades = this.detectOneToOneRelations(relations);\n relations.push(...oneToOneUpgrades);\n\n // Filter by confidence\n return relations.filter((r) => r.confidence >= this.options.minConfidence);\n }\n\n /**\n * Detect junction tables that represent ManyToMany relationships.\n */\n private detectJunctionTables(): DetectedRelation[] {\n const relations: DetectedRelation[] = [];\n\n for (const table of this.ast.tables.values()) {\n if (!this.ast.isJunctionTable(table)) continue;\n\n const outgoingRels = table.outgoingRelations;\n if (outgoingRels.length !== 2) continue;\n\n const [rel1, rel2] = outgoingRels;\n\n // Create ManyToMany relation\n relations.push({\n type: 'ManyToMany',\n from: {\n table: rel1.to.table,\n columns: rel1.to.columns,\n },\n to: {\n table: rel2.to.table,\n columns: rel2.to.columns,\n },\n through: table,\n confidence: 0.95,\n source: 'junction_table',\n });\n\n // Also create inverse relation\n relations.push({\n type: 'ManyToMany',\n from: {\n table: rel2.to.table,\n columns: rel2.to.columns,\n },\n to: {\n table: rel1.to.table,\n columns: rel1.to.columns,\n },\n through: table,\n confidence: 0.95,\n source: 'junction_table',\n });\n }\n\n return relations;\n }\n\n /**\n * Detect relations where unique FK should upgrade to OneToOne.\n */\n private detectOneToOneRelations(existingRelations: DetectedRelation[]): DetectedRelation[] {\n const upgrades: DetectedRelation[] = [];\n\n for (const rel of existingRelations) {\n if (rel.source !== 'explicit_fk') continue;\n\n const fromCol = rel.from.columns[0];\n if (fromCol?.isUnique && rel.type === 'ManyToOne') {\n // Upgrade to OneToOne\n upgrades.push({\n type: 'OneToOne',\n from: rel.from,\n to: rel.to,\n through: rel.through,\n confidence: 0.9,\n source: 'unique_fk',\n });\n }\n }\n\n return upgrades;\n }\n\n /**\n * Default singularize function (delegates to shared utility).\n */\n private defaultSingularize(name: string): string {\n return singularize(name);\n }\n}\n\n/**\n * Create a SmartRelationDetector for the given AST.\n */\nexport function createRelationDetector(ast: SchemaAST, options?: RelationDetectorOptions): SmartRelationDetector {\n return new SmartRelationDetector(ast, options);\n}\n","/**\n * SchemaAST Differ\n *\n * Compares two SchemaAST instances and produces a detailed diff.\n * Used for:\n * - Migration generation (entity vs database)\n * - Drift detection (expected vs actual)\n * - Schema synchronization\n */\n\nimport { areTypesEqual, isBreakingTypeChange } from './canonicalType.js';\nimport type { SchemaAST } from './schemaAST.js';\nimport type {\n ColumnDiff,\n ColumnNode,\n IndexDiff,\n IndexNode,\n RelationshipDiff,\n RelationshipNode,\n SchemaDiffResult,\n TableDiff,\n TableNode,\n} from './types.js';\nimport { DEFAULT_FOREIGN_KEY_ACTION } from './types.js';\n\n/**\n * Options for schema diffing.\n */\nexport interface DiffOptions {\n /** Compare indexes */\n compareIndexes?: boolean;\n /** Compare foreign keys/relationships */\n compareRelationships?: boolean;\n /** Ignore case differences in names */\n ignoreCase?: boolean;\n /** Tables to exclude from comparison */\n excludeTables?: string[];\n}\n\n/**\n * Default diff options.\n */\nconst DEFAULT_OPTIONS: Required<DiffOptions> = {\n compareIndexes: true,\n compareRelationships: true,\n ignoreCase: false,\n excludeTables: [],\n};\n\n/**\n * Compares two SchemaAST instances and produces a detailed diff.\n */\nexport class SchemaASTDiffer {\n /**\n * Compare two schemas and return the differences.\n *\n * @param source - The \"expected\" or \"desired\" schema (e.g., from entities)\n * @param target - The \"actual\" or \"current\" schema (e.g., from database)\n * @param options - Diff options\n * @returns Detailed diff result\n */\n diff(source: SchemaAST, target: SchemaAST, options: DiffOptions = {}): SchemaDiffResult {\n const opts = { ...DEFAULT_OPTIONS, ...options };\n const normalizeName = opts.ignoreCase ? (n: string) => n.toLowerCase() : (n: string) => n;\n\n const tablesToCreate: TableNode[] = [];\n const tablesToDrop: TableNode[] = [];\n const tablesToAlter: TableDiff[] = [];\n const columnDiffs: ColumnDiff[] = [];\n const indexDiffs: IndexDiff[] = [];\n const relationshipDiffs: RelationshipDiff[] = [];\n\n // Build lookup maps\n const sourceTableMap = new Map<string, TableNode>();\n const targetTableMap = new Map<string, TableNode>();\n\n for (const table of source.tables.values()) {\n if (!opts.excludeTables.includes(table.name)) {\n sourceTableMap.set(normalizeName(table.name), table);\n }\n }\n\n for (const table of target.tables.values()) {\n if (!opts.excludeTables.includes(table.name)) {\n targetTableMap.set(normalizeName(table.name), table);\n }\n }\n\n // Find tables to create (in source but not target)\n for (const [name, sourceTable] of sourceTableMap) {\n if (!targetTableMap.has(name)) {\n tablesToCreate.push(sourceTable);\n }\n }\n\n // Find tables to drop (in target but not source)\n for (const [name, targetTable] of targetTableMap) {\n if (!sourceTableMap.has(name)) {\n tablesToDrop.push(targetTable);\n }\n }\n\n // Find tables that need alteration\n for (const [name, sourceTable] of sourceTableMap) {\n const targetTable = targetTableMap.get(name);\n if (!targetTable) continue;\n\n const tableDiff = this.diffTable(sourceTable, targetTable, opts);\n if (tableDiff) {\n tablesToAlter.push(tableDiff);\n\n // Collect column diffs\n if (tableDiff.columnDiffs) {\n columnDiffs.push(...tableDiff.columnDiffs);\n }\n\n // Collect index diffs\n if (tableDiff.indexDiffs) {\n indexDiffs.push(...tableDiff.indexDiffs);\n }\n }\n }\n\n // Compare relationships (global view, not just per-table)\n if (opts.compareRelationships) {\n const relDiffs = this.diffRelationships(source, target, opts);\n relationshipDiffs.push(...relDiffs);\n }\n\n // Determine if there are any differences\n const hasDifferences =\n tablesToCreate.length > 0 ||\n tablesToDrop.length > 0 ||\n tablesToAlter.length > 0 ||\n relationshipDiffs.length > 0 ||\n indexDiffs.length > 0;\n\n // Determine if any changes are breaking\n const hasBreakingChanges = tablesToDrop.length > 0 || columnDiffs.some((d) => d.isBreaking);\n\n return {\n tablesToCreate,\n tablesToDrop,\n tablesToAlter,\n columnDiffs,\n indexDiffs,\n relationshipDiffs,\n hasDifferences,\n hasBreakingChanges,\n };\n }\n\n /**\n * Compare two tables and return the differences.\n */\n private diffTable(source: TableNode, target: TableNode, opts: Required<DiffOptions>): TableDiff | undefined {\n const normalizeName = opts.ignoreCase ? (n: string) => n.toLowerCase() : (n: string) => n;\n\n const columnDiffs = this.diffTableColumns(source, target, normalizeName);\n const indexDiffs = opts.compareIndexes ? this.diffTableIndexes(source, target, normalizeName) : [];\n\n // If no differences, return undefined\n if (columnDiffs.length === 0 && indexDiffs.length === 0) {\n return undefined;\n }\n\n return {\n name: source.name,\n type: 'alter',\n columnDiffs,\n indexDiffs,\n };\n }\n\n /**\n * Compare columns between two tables.\n */\n private diffTableColumns(source: TableNode, target: TableNode, normalizeName: (n: string) => string): ColumnDiff[] {\n const columnDiffs: ColumnDiff[] = [];\n\n // Build column maps\n const sourceColMap = new Map<string, ColumnNode>();\n const targetColMap = new Map<string, ColumnNode>();\n\n for (const col of source.columns.values()) {\n sourceColMap.set(normalizeName(col.name), col);\n }\n\n for (const col of target.columns.values()) {\n targetColMap.set(normalizeName(col.name), col);\n }\n\n // Columns to add (in source but not target)\n for (const [name, sourceCol] of sourceColMap) {\n if (!targetColMap.has(name)) {\n columnDiffs.push({\n table: source.name,\n column: sourceCol.name,\n type: 'add',\n expected: sourceCol,\n description: `Add column \"${sourceCol.name}\"`,\n });\n }\n }\n\n // Columns to drop (in target but not source)\n for (const [name, targetCol] of targetColMap) {\n if (!sourceColMap.has(name)) {\n columnDiffs.push({\n table: target.name,\n column: targetCol.name,\n type: 'drop',\n actual: targetCol,\n isBreaking: true,\n description: `Drop column \"${targetCol.name}\"`,\n });\n }\n }\n\n // Columns that might need alteration\n for (const [name, sourceCol] of sourceColMap) {\n const targetCol = targetColMap.get(name);\n if (!targetCol) continue;\n\n const colDiff = this.diffColumn(source.name, sourceCol, targetCol);\n if (colDiff) {\n columnDiffs.push(colDiff);\n }\n }\n\n return columnDiffs;\n }\n\n /**\n * Compare indexes between two tables.\n */\n private diffTableIndexes(source: TableNode, target: TableNode, normalizeName: (n: string) => string): IndexDiff[] {\n const indexDiffs: IndexDiff[] = [];\n const sourceIndexMap = new Map<string, IndexNode>();\n const targetIndexMap = new Map<string, IndexNode>();\n\n for (const idx of source.indexes) {\n sourceIndexMap.set(normalizeName(idx.name), idx);\n }\n\n for (const idx of target.indexes) {\n targetIndexMap.set(normalizeName(idx.name), idx);\n }\n\n // Indexes to create\n for (const [, sourceIdx] of sourceIndexMap) {\n const normalizedName = normalizeName(sourceIdx.name);\n if (!targetIndexMap.has(normalizedName)) {\n indexDiffs.push({\n name: sourceIdx.name,\n table: source.name,\n type: 'create',\n expected: sourceIdx,\n });\n }\n }\n\n // Indexes to drop\n for (const [, targetIdx] of targetIndexMap) {\n const normalizedName = normalizeName(targetIdx.name);\n if (!sourceIndexMap.has(normalizedName)) {\n indexDiffs.push({\n name: targetIdx.name,\n table: target.name,\n type: 'drop',\n actual: targetIdx,\n });\n }\n }\n\n // Indexes that might differ\n for (const [name, sourceIdx] of sourceIndexMap) {\n const targetIdx = targetIndexMap.get(name);\n if (!targetIdx) continue;\n\n const idxDiff = this.diffIndex(source.name, sourceIdx, targetIdx);\n if (idxDiff) {\n indexDiffs.push(idxDiff);\n }\n }\n\n return indexDiffs;\n }\n\n /**\n * Compare two columns and return the difference.\n */\n private diffColumn(tableName: string, source: ColumnNode, target: ColumnNode): ColumnDiff | undefined {\n const differences: string[] = [];\n\n // Compare types\n if (!areTypesEqual(source.type, target.type)) {\n differences.push(`type: ${this.formatType(source.type)} → ${this.formatType(target.type)}`);\n }\n\n // Compare nullability\n if (source.nullable !== target.nullable) {\n differences.push(`nullable: ${target.nullable} → ${source.nullable}`);\n }\n\n // Compare unique constraint\n if (source.isUnique !== target.isUnique) {\n differences.push(`unique: ${target.isUnique} → ${source.isUnique}`);\n }\n\n // Compare auto-increment\n if (source.isAutoIncrement !== target.isAutoIncrement) {\n differences.push(`autoIncrement: ${target.isAutoIncrement} → ${source.isAutoIncrement}`);\n }\n\n // Compare default values (if both defined)\n if (this.normalizeDefault(source.defaultValue) !== this.normalizeDefault(target.defaultValue)) {\n differences.push(`default: ${target.defaultValue ?? 'NULL'} → ${source.defaultValue ?? 'NULL'}`);\n }\n\n if (differences.length === 0) {\n return undefined;\n }\n\n return {\n table: tableName,\n column: source.name,\n type: 'alter',\n expected: source,\n actual: target,\n isBreaking: isBreakingTypeChange(target.type, source.type),\n description: differences.join(', '),\n };\n }\n\n /**\n * Compare two indexes and return the difference.\n */\n private diffIndex(tableName: string, source: IndexNode, target: IndexNode): IndexDiff | undefined {\n // Compare columns\n const sourceColNames = source.columns.map((c) => c.name).join(',');\n const targetColNames = target.columns.map((c) => c.name).join(',');\n\n if (sourceColNames !== targetColNames) {\n return {\n name: source.name,\n table: tableName,\n type: 'alter',\n expected: source,\n actual: target,\n };\n }\n\n // Compare uniqueness\n if (source.unique !== target.unique) {\n return {\n name: source.name,\n table: tableName,\n type: 'alter',\n expected: source,\n actual: target,\n };\n }\n\n // Compare index type\n if (source.type !== target.type) {\n return {\n name: source.name,\n table: tableName,\n type: 'alter',\n expected: source,\n actual: target,\n };\n }\n\n return undefined;\n }\n\n /**\n * Compare relationships at the schema level.\n */\n private diffRelationships(source: SchemaAST, target: SchemaAST, opts: Required<DiffOptions>): RelationshipDiff[] {\n const diffs: RelationshipDiff[] = [];\n const normalizeName = opts.ignoreCase ? (n: string) => n.toLowerCase() : (n: string) => n;\n\n // Build relationship maps by a normalized key\n const sourceRelMap = new Map<string, RelationshipNode>();\n const targetRelMap = new Map<string, RelationshipNode>();\n\n for (const rel of source.relationships) {\n const key = this.getRelationshipKey(rel, normalizeName);\n sourceRelMap.set(key, rel);\n }\n\n for (const rel of target.relationships) {\n const key = this.getRelationshipKey(rel, normalizeName);\n targetRelMap.set(key, rel);\n }\n\n // Relationships to create\n for (const [key, sourceRel] of sourceRelMap) {\n if (!targetRelMap.has(key)) {\n diffs.push({\n name: sourceRel.name,\n fromTable: sourceRel.from.table.name,\n toTable: sourceRel.to.table.name,\n type: 'create',\n expected: sourceRel,\n });\n }\n }\n\n // Relationships to drop\n for (const [key, targetRel] of targetRelMap) {\n if (!sourceRelMap.has(key)) {\n diffs.push({\n name: targetRel.name,\n fromTable: targetRel.from.table.name,\n toTable: targetRel.to.table.name,\n type: 'drop',\n actual: targetRel,\n });\n }\n }\n\n // Relationships that differ\n for (const [key, sourceRel] of sourceRelMap) {\n const targetRel = targetRelMap.get(key);\n if (!targetRel) continue;\n\n const relDiff = this.diffRelationship(sourceRel, targetRel);\n if (relDiff) {\n diffs.push(relDiff);\n }\n }\n\n return diffs;\n }\n\n /**\n * Compare two relationships.\n */\n private diffRelationship(source: RelationshipNode, target: RelationshipNode): RelationshipDiff | undefined {\n // Compare on delete/update actions (normalizing defaults)\n const sDelete = source.onDelete ?? DEFAULT_FOREIGN_KEY_ACTION;\n const tDelete = target.onDelete ?? DEFAULT_FOREIGN_KEY_ACTION;\n const sUpdate = source.onUpdate ?? DEFAULT_FOREIGN_KEY_ACTION;\n const tUpdate = target.onUpdate ?? DEFAULT_FOREIGN_KEY_ACTION;\n\n if (sDelete !== tDelete || sUpdate !== tUpdate) {\n return {\n name: source.name,\n fromTable: source.from.table.name,\n toTable: source.to.table.name,\n type: 'alter',\n expected: source,\n actual: target,\n };\n }\n\n return undefined;\n }\n\n /**\n * Generate a unique key for a relationship based on its structure.\n */\n private getRelationshipKey(rel: RelationshipNode, normalizeName: (n: string) => string): string {\n const fromCols = rel.from.columns\n .map((c) => c.name)\n .sort()\n .join(',');\n const toCols = rel.to.columns\n .map((c) => c.name)\n .sort()\n .join(',');\n return `${normalizeName(rel.from.table.name)}.${fromCols}->${normalizeName(rel.to.table.name)}.${toCols}`;\n }\n\n /**\n * Format a canonical type for display.\n */\n private formatType(type: ColumnNode['type']): string {\n let result = type.category;\n if (type.size) result += `(${type.size})`;\n if (type.length) result += `(${type.length})`;\n if (type.precision) {\n result += type.scale !== undefined ? `(${type.precision},${type.scale})` : `(${type.precision})`;\n }\n if (type.unsigned) result += ' unsigned';\n return result;\n }\n\n /**\n * Normalize default values for comparison.\n */\n private normalizeDefault(value: unknown): string {\n if (value === undefined || value === null) return '';\n if (typeof value === 'string') {\n // Normalize function calls\n const upper = value.toUpperCase();\n if (upper.includes('NOW()') || upper.includes('CURRENT_TIMESTAMP')) {\n return 'CURRENT_TIMESTAMP';\n }\n }\n return String(value);\n }\n}\n\n/**\n * Create a differ and run a comparison.\n * Convenience function for one-off comparisons.\n */\nexport function diffSchemas(source: SchemaAST, target: SchemaAST, options?: DiffOptions): SchemaDiffResult {\n const differ = new SchemaASTDiffer();\n return differ.diff(source, target, options);\n}\n","/**\n * Drift Detector\n *\n * Detects schema drift between expected schema (from entities) and\n * actual database schema.\n */\n\nimport type { AbstractDialect } from '../../dialect/abstractDialect.js';\nimport { canonicalToSql } from '../../schema/canonicalType.js';\nimport type { SchemaAST } from '../../schema/schemaAST.js';\nimport { SchemaASTDiffer } from '../../schema/schemaASTDiffer.js';\nimport type { CanonicalType, Drift, DriftReport, DriftStatus } from '../../schema/types.js';\n\n/**\n * Options for drift detection.\n */\nexport interface DriftDetectorOptions {\n /** Include column type mismatches */\n checkTypes?: boolean;\n /** Include nullable mismatches */\n checkNullable?: boolean;\n /** Include index differences */\n checkIndexes?: boolean;\n /** Include foreign key differences */\n checkForeignKeys?: boolean;\n /** Include default value differences */\n checkDefaults?: boolean;\n /** Dialect instance for type formatting */\n dialect?: AbstractDialect;\n}\n\n/**\n * Detects drift between expected and actual database schemas.\n */\nexport class DriftDetector {\n private readonly options: Required<DriftDetectorOptions>;\n\n constructor(\n private readonly expectedAST: SchemaAST,\n private readonly actualAST: SchemaAST,\n options: DriftDetectorOptions = {},\n ) {\n this.options = {\n checkTypes: options.checkTypes ?? true,\n checkNullable: options.checkNullable ?? true,\n checkIndexes: options.checkIndexes ?? true,\n checkForeignKeys: options.checkForeignKeys ?? true,\n checkDefaults: options.checkDefaults ?? false,\n dialect: options.dialect,\n } as Required<DriftDetectorOptions>;\n }\n\n /**\n * Detect all schema drift.\n */\n detect(): DriftReport {\n const differ = new SchemaASTDiffer();\n const diff = differ.diff(this.expectedAST, this.actualAST);\n\n const drifts: Drift[] = [\n ...this.detectTableDrifts(diff),\n ...this.detectColumnDrifts(diff),\n ...this.detectIndexDrifts(diff),\n ...this.detectRelationshipDrifts(diff),\n ];\n\n return {\n status: this.calculateStatus(drifts),\n drifts,\n summary: this.createSummary(drifts),\n generatedAt: new Date(),\n };\n }\n\n /**\n * Detect table-level drifts (missing/unexpected tables).\n */\n private detectTableDrifts(diff: ReturnType<SchemaASTDiffer['diff']>): Drift[] {\n const drifts: Drift[] = [];\n\n for (const table of diff.tablesToCreate) {\n drifts.push({\n type: 'missing_table',\n severity: 'critical',\n table: table.name,\n details: `Entity \"${table.name}\" exists but table not in database`,\n suggestion: 'Run migrations to create table',\n });\n }\n\n for (const table of diff.tablesToDrop) {\n drifts.push({\n type: 'unexpected_table',\n severity: 'warning',\n table: table.name,\n details: `Table \"${table.name}\" exists in database but no matching entity`,\n suggestion: 'Create entity or drop table',\n });\n }\n\n return drifts;\n }\n\n /**\n * Detect column-level drifts.\n */\n private detectColumnDrifts(diff: ReturnType<SchemaASTDiffer['diff']>): Drift[] {\n const drifts: Drift[] = [];\n\n for (const colDiff of diff.columnDiffs) {\n if (colDiff.type === 'add') {\n drifts.push({\n type: 'missing_column',\n severity: 'critical',\n table: colDiff.table,\n column: colDiff.column,\n details: `Column \"${colDiff.column}\" expected but not found in database`,\n suggestion: 'Run migration to add column',\n });\n } else if (colDiff.type === 'drop') {\n drifts.push({\n type: 'unexpected_column',\n severity: 'warning',\n table: colDiff.table,\n column: colDiff.column,\n details: `Column \"${colDiff.column}\" exists in database but not in entity`,\n suggestion: 'Add to entity or create migration to drop',\n });\n } else if (colDiff.type === 'alter') {\n this.addAlterColumnDrifts(colDiff, drifts);\n }\n }\n\n return drifts;\n }\n\n /**\n * Add drifts for column alterations (type/nullable mismatches).\n */\n private addAlterColumnDrifts(\n colDiff: {\n table: string;\n column: string;\n expected?: { type?: unknown; nullable?: boolean };\n actual?: { type?: unknown; nullable?: boolean };\n isBreaking?: boolean;\n },\n drifts: Drift[],\n ): void {\n if (this.options.checkTypes && colDiff.expected && colDiff.actual) {\n const expectedType = this.formatType(colDiff.expected.type as CanonicalType | undefined);\n const actualType = this.formatType(colDiff.actual.type as CanonicalType | undefined);\n if (expectedType !== actualType) {\n drifts.push({\n type: 'type_mismatch',\n severity: colDiff.isBreaking ? 'critical' : 'warning',\n table: colDiff.table,\n column: colDiff.column,\n expected: expectedType,\n actual: actualType,\n details: `Type mismatch for \"${colDiff.column}\": expected ${expectedType}, got ${actualType}`,\n suggestion: colDiff.isBreaking\n ? 'Data truncation risk! Create migration to fix.'\n : 'Create migration to align types',\n });\n }\n }\n\n if (this.options.checkNullable && colDiff.expected && colDiff.actual) {\n if (colDiff.expected.nullable !== colDiff.actual.nullable) {\n drifts.push({\n type: 'constraint_mismatch',\n severity: 'warning',\n table: colDiff.table,\n column: colDiff.column,\n expected: colDiff.expected.nullable ? 'NULLABLE' : 'NOT NULL',\n actual: colDiff.actual.nullable ? 'NULLABLE' : 'NOT NULL',\n details: `Nullable mismatch for \"${colDiff.column}\"`,\n suggestion: 'Align nullable setting in entity or database',\n });\n }\n }\n }\n\n /**\n * Detect index drifts.\n */\n private detectIndexDrifts(diff: ReturnType<SchemaASTDiffer['diff']>): Drift[] {\n if (!this.options.checkIndexes) return [];\n\n const drifts: Drift[] = [];\n\n for (const idxDiff of diff.indexDiffs) {\n if (idxDiff.type === 'create') {\n drifts.push({\n type: 'missing_index',\n severity: 'warning',\n table: idxDiff.table,\n index: idxDiff.name,\n details: `Index \"${idxDiff.name}\" expected but not found in database`,\n suggestion: 'Create index via migration',\n });\n } else if (idxDiff.type === 'drop') {\n drifts.push({\n type: 'unexpected_index',\n severity: 'info',\n table: idxDiff.table,\n index: idxDiff.name,\n details: `Index \"${idxDiff.name}\" exists in database but not defined in entity`,\n suggestion: 'Add @Field({ index }) or create migration to drop',\n });\n }\n }\n\n return drifts;\n }\n\n /**\n * Detect relationship/FK drifts.\n */\n private detectRelationshipDrifts(diff: ReturnType<SchemaASTDiffer['diff']>): Drift[] {\n if (!this.options.checkForeignKeys) return [];\n\n const drifts: Drift[] = [];\n\n for (const relDiff of diff.relationshipDiffs) {\n if (relDiff.type === 'create') {\n drifts.push({\n type: 'missing_relationship',\n severity: 'warning',\n table: relDiff.fromTable,\n relationship: relDiff.name,\n details: `FK \"${relDiff.name}\" expected but not found in database`,\n suggestion: 'Add FK constraint or remove relation from entity',\n });\n } else if (relDiff.type === 'drop') {\n drifts.push({\n type: 'unexpected_relationship',\n severity: 'info',\n table: relDiff.fromTable,\n relationship: relDiff.name,\n details: `FK \"${relDiff.name}\" exists in database but not in entity`,\n suggestion: 'Add relation to entity or drop FK',\n });\n }\n }\n\n return drifts;\n }\n\n /**\n * Calculate overall status based on drifts.\n */\n private calculateStatus(drifts: Drift[]): DriftStatus {\n if (drifts.length === 0) return 'in_sync';\n\n const hasCritical = drifts.some((d) => d.severity === 'critical');\n if (hasCritical) return 'critical';\n\n return 'drifted';\n }\n\n /**\n * Create a summary of drifts by severity.\n */\n private createSummary(drifts: Drift[]): { critical: number; warning: number; info: number } {\n return {\n critical: drifts.filter((d) => d.severity === 'critical').length,\n warning: drifts.filter((d) => d.severity === 'warning').length,\n info: drifts.filter((d) => d.severity === 'info').length,\n };\n }\n\n /**\n * Format type for display.\n */\n private formatType(type?: CanonicalType): string {\n const dialect = this.options.dialect;\n if (!type || !dialect) return 'unknown';\n return canonicalToSql(type, dialect);\n }\n}\n\n/**\n * Create a DriftDetector for comparing expected vs actual schemas.\n */\nexport function createDriftDetector(\n expectedAST: SchemaAST,\n actualAST: SchemaAST,\n options?: DriftDetectorOptions,\n): DriftDetector {\n return new DriftDetector(expectedAST, actualAST, options);\n}\n\n/**\n * Quick check for schema drift.\n */\nexport function detectDrift(expectedAST: SchemaAST, actualAST: SchemaAST, options?: DriftDetectorOptions): DriftReport {\n const detector = new DriftDetector(expectedAST, actualAST, options);\n return detector.detect();\n}\n","import type { AbstractSqlDialect } from '../../dialect/index.js';\nimport { sqlToCanonical } from '../../schema/canonicalType.js';\nimport { SchemaAST } from '../../schema/schemaAST.js';\nimport type { CanonicalType, ColumnNode, IndexNode, RelationshipNode, TableNode } from '../../schema/types.js';\nimport type { ColumnSchema, TableSchema } from '../../type/migration.js';\nimport { escapeSqlId } from '../../util/index.js';\n\n/**\n * Base class for SQL introspectors with shared AST building logic.\n */\nexport abstract class BaseSqlIntrospector {\n constructor(protected readonly dialect: AbstractSqlDialect) {}\n\n protected escapeId(identifier: string): string {\n return escapeSqlId(identifier, this.dialect.quoteChar);\n }\n /**\n * Introspect entire database schema and return SchemaAST.\n */\n async introspect(): Promise<SchemaAST> {\n const tableNames = await this.getTableNames();\n const tableSchemas: TableSchema[] = [];\n\n for (const tableName of tableNames) {\n const schema = await this.getTableSchema(tableName);\n if (schema) {\n tableSchemas.push(schema);\n }\n }\n\n return this.buildAST(tableSchemas);\n }\n\n abstract getTableNames(): Promise<string[]>;\n abstract getTableSchema(tableName: string): Promise<TableSchema | undefined>;\n\n /**\n * Build SchemaAST from table schemas.\n */\n protected buildAST(tableSchemas: TableSchema[]): SchemaAST {\n const ast = new SchemaAST();\n const tableNodes = new Map<string, TableNode>();\n\n this.buildTables(ast, tableNodes, tableSchemas);\n this.buildRelationships(ast, tableNodes, tableSchemas);\n this.buildIndexes(ast, tableNodes, tableSchemas);\n\n return ast;\n }\n\n private buildTables(ast: SchemaAST, tableNodes: Map<string, TableNode>, tableSchemas: TableSchema[]) {\n for (const schema of tableSchemas) {\n const columns = new Map<string, ColumnNode>();\n const table: TableNode = {\n name: schema.name,\n columns,\n primaryKey: [],\n indexes: [],\n schema: ast,\n incomingRelations: [],\n outgoingRelations: [],\n };\n\n for (const col of schema.columns) {\n const column: ColumnNode = {\n name: col.name,\n type: this.columnSchemaToCanonical(col),\n nullable: col.nullable,\n defaultValue: col.defaultValue,\n isPrimaryKey: col.isPrimaryKey,\n isAutoIncrement: col.isAutoIncrement,\n isUnique: col.isUnique,\n comment: col.comment,\n table,\n referencedBy: [],\n };\n columns.set(col.name, column);\n if (col.isPrimaryKey) {\n table.primaryKey.push(column);\n }\n }\n tableNodes.set(schema.name, table);\n ast.addTable(table);\n }\n }\n\n private buildRelationships(ast: SchemaAST, tableNodes: Map<string, TableNode>, tableSchemas: TableSchema[]) {\n for (const schema of tableSchemas) {\n if (!schema.foreignKeys) continue;\n const fromTable = tableNodes.get(schema.name);\n if (!fromTable) continue;\n\n for (const fk of schema.foreignKeys) {\n const toTable = tableNodes.get(fk.referencedTable);\n if (!toTable) continue;\n\n const fromColumns = fk.columns.map((c) => fromTable.columns.get(c)).filter((c): c is ColumnNode => !!c);\n const toColumns = fk.referencedColumns.map((c) => toTable.columns.get(c)).filter((c): c is ColumnNode => !!c);\n\n if (fromColumns.length > 0 && toColumns.length > 0) {\n const rel: RelationshipNode = {\n name: fk.name,\n type: fromColumns[0].isUnique ? 'OneToOne' : 'ManyToOne',\n from: { table: fromTable, columns: fromColumns },\n to: { table: toTable, columns: toColumns },\n onDelete: fk.onDelete || 'NO ACTION',\n onUpdate: fk.onUpdate || 'NO ACTION',\n };\n ast.addRelationship(rel);\n }\n }\n }\n }\n\n private buildIndexes(ast: SchemaAST, tableNodes: Map<string, TableNode>, tableSchemas: TableSchema[]) {\n for (const schema of tableSchemas) {\n if (!schema.indexes) continue;\n const table = tableNodes.get(schema.name);\n if (!table) continue;\n\n for (const idx of schema.indexes) {\n const columns = idx.columns.map((c) => table.columns.get(c)).filter((c): c is ColumnNode => !!c);\n if (columns.length > 0) {\n const index: IndexNode = {\n name: idx.name,\n table,\n columns,\n unique: idx.unique,\n };\n ast.addIndex(index);\n }\n }\n }\n }\n\n private columnSchemaToCanonical(col: ColumnSchema): CanonicalType {\n const base = sqlToCanonical(col.type);\n return {\n ...base,\n length: col.length ?? base.length,\n precision: col.precision ?? base.precision,\n scale: col.scale ?? base.scale,\n };\n }\n}\n","import type {\n ColumnSchema,\n ForeignKeySchema,\n IndexSchema,\n QuerierPool,\n RawRow,\n SchemaIntrospector,\n SqlQuerier,\n TableSchema,\n} from '../../type/index.js';\nimport { isSqlQuerier } from '../../type/index.js';\nimport { BaseSqlIntrospector } from './baseSqlIntrospector.js';\n\n/**\n * Referential action type for foreign key constraints.\n */\nexport type ReferentialAction = 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION';\n\n/**\n * Abstract base class for SQL schema introspectors.\n *\n * Uses the template-method pattern to consolidate shared logic while allowing\n * dialect-specific implementations for SQL queries and type normalization.\n *\n * Subclasses must implement:\n * - `getTableNamesQuery()` - SQL to list all table names\n * - `tableExistsQuery()` - SQL to check if a table exists\n * - `getColumnsQuery()` - SQL to get column metadata\n * - `getIndexesQuery()` - SQL to get index metadata\n * - `getForeignKeysQuery()` - SQL to get foreign key metadata\n * - `getPrimaryKeyQuery()` - SQL to get primary key columns\n * - `mapColumnRow()` - Map a column query result row to ColumnSchema\n * - `mapIndexRow()` - Map an index query result row to IndexSchema\n * - `mapForeignKeyRow()` - Map a foreign key query result row to ForeignKeySchema\n * - `mapTableNameRow()` - Extract table name from a row\n * - `mapPrimaryKeyRow()` - Extract column name from a PK row\n */\nexport abstract class AbstractSqlSchemaIntrospector extends BaseSqlIntrospector implements SchemaIntrospector {\n protected abstract readonly pool: QuerierPool;\n\n // ============================================================================\n // Template Methods (shared control flow)\n // ============================================================================\n\n async getTableSchema(tableName: string): Promise<TableSchema | undefined> {\n const querier = await this.getQuerier();\n\n try {\n const exists = await this.tableExistsInternal(querier, tableName);\n if (!exists) {\n return undefined;\n }\n\n const [columns, indexes, foreignKeys, primaryKey] = await Promise.all([\n this.getColumns(querier, tableName),\n this.getIndexes(querier, tableName),\n this.getForeignKeys(querier, tableName),\n this.getPrimaryKey(querier, tableName),\n ]);\n\n return {\n name: tableName,\n columns,\n primaryKey,\n indexes,\n foreignKeys,\n };\n } finally {\n await querier.release();\n }\n }\n\n async getTableNames(): Promise<string[]> {\n const querier = await this.getQuerier();\n\n try {\n const results = await querier.all<RawRow>(this.getTableNamesQuery());\n return results.map((row) => this.mapTableNameRow(row));\n } finally {\n await querier.release();\n }\n }\n\n async tableExists(tableName: string): Promise<boolean> {\n const querier = await this.getQuerier();\n\n try {\n return this.tableExistsInternal(querier, tableName);\n } finally {\n await querier.release();\n }\n }\n\n protected async getQuerier(): Promise<SqlQuerier> {\n const querier = await this.pool.getQuerier();\n\n if (!isSqlQuerier(querier)) {\n await querier.release();\n throw new Error(`${this.constructor.name} requires a SQL-based querier`);\n }\n\n return querier;\n }\n\n protected async tableExistsInternal(querier: SqlQuerier, tableName: string): Promise<boolean> {\n const sql = this.tableExistsQuery();\n const params = this.tableExistsParams(tableName);\n const results = await querier.all<RawRow>(sql, params);\n return this.parseTableExistsResult(results);\n }\n\n protected async getColumns(querier: SqlQuerier, tableName: string): Promise<ColumnSchema[]> {\n const sql = this.getColumnsQuery(tableName);\n const params = this.getColumnsParams(tableName);\n const results = await querier.all<RawRow>(sql, params);\n return this.mapColumnsResult(querier, tableName, results);\n }\n\n protected async getIndexes(querier: SqlQuerier, tableName: string): Promise<IndexSchema[]> {\n const sql = this.getIndexesQuery(tableName);\n const params = this.getIndexesParams(tableName);\n const results = await querier.all<RawRow>(sql, params);\n return this.mapIndexesResult(querier, tableName, results);\n }\n\n protected async getForeignKeys(querier: SqlQuerier, tableName: string): Promise<ForeignKeySchema[]> {\n const sql = this.getForeignKeysQuery(tableName);\n const params = this.getForeignKeysParams(tableName);\n const results = await querier.all<RawRow>(sql, params);\n return this.mapForeignKeysResult(querier, tableName, results);\n }\n\n protected async getPrimaryKey(querier: SqlQuerier, tableName: string): Promise<string[] | undefined> {\n const sql = this.getPrimaryKeyQuery(tableName);\n const params = this.getPrimaryKeyParams(tableName);\n const results = await querier.all<RawRow>(sql, params);\n return this.mapPrimaryKeyResult(results);\n }\n\n // ============================================================================\n // Parameter Methods (can be overridden by dialects)\n // ============================================================================\n\n protected tableExistsParams(tableName: string): unknown[] {\n return [tableName];\n }\n\n protected getColumnsParams(tableName: string): unknown[] {\n return [tableName];\n }\n\n protected getIndexesParams(tableName: string): unknown[] {\n return [tableName];\n }\n\n protected getForeignKeysParams(tableName: string): unknown[] {\n return [tableName];\n }\n\n protected getPrimaryKeyParams(tableName: string): unknown[] {\n return [tableName];\n }\n\n // ============================================================================\n // Shared Utilities\n // ============================================================================\n\n /**\n * Normalize referential action string to standard type.\n */\n protected normalizeReferentialAction(action: string): ReferentialAction | undefined {\n switch (action.toUpperCase()) {\n case 'CASCADE':\n return 'CASCADE';\n case 'SET NULL':\n return 'SET NULL';\n case 'RESTRICT':\n return 'RESTRICT';\n case 'NO ACTION':\n return 'NO ACTION';\n default:\n return undefined;\n }\n }\n\n /**\n * Convert bigint/null values to number safely.\n */\n protected toNumber(value: unknown): number | undefined {\n if (value == null || value === '') {\n return undefined;\n }\n return Number(value);\n }\n\n // ============================================================================\n // Abstract Methods (dialect-specific)\n // ============================================================================\n\n /** SQL query to list all table names. */\n protected abstract getTableNamesQuery(): string;\n\n /** SQL query to check if a table exists. Parameter: tableName. */\n protected abstract tableExistsQuery(): string;\n\n /** Parse the result of tableExistsQuery to boolean. */\n protected abstract parseTableExistsResult(results: RawRow[]): boolean;\n\n /** SQL query to get column metadata. Parameter: tableName (for PRAGMA-style). */\n protected abstract getColumnsQuery(tableName: string): string;\n\n /** SQL query to get index metadata. Parameter: tableName (for PRAGMA-style). */\n protected abstract getIndexesQuery(tableName: string): string;\n\n /** SQL query to get foreign key metadata. Parameter: tableName (for PRAGMA-style). */\n protected abstract getForeignKeysQuery(tableName: string): string;\n\n /** SQL query to get primary key columns. Parameter: tableName (for PRAGMA-style). */\n protected abstract getPrimaryKeyQuery(tableName: string): string;\n\n /** Extract table name from a row returned by getTableNamesQuery. */\n protected abstract mapTableNameRow(row: RawRow): string;\n\n /** Map column query results to ColumnSchema array. Allows async for SQLite's unique column check. */\n protected abstract mapColumnsResult(\n querier: SqlQuerier,\n tableName: string,\n results: RawRow[],\n ): Promise<ColumnSchema[]>;\n\n /** Map index query results to IndexSchema array. Allows async for SQLite's index_info calls. */\n protected abstract mapIndexesResult(\n querier: SqlQuerier,\n tableName: string,\n results: RawRow[],\n ): Promise<IndexSchema[]>;\n\n /** Map foreign key query results to ForeignKeySchema array. */\n protected abstract mapForeignKeysResult(\n querier: SqlQuerier,\n tableName: string,\n results: RawRow[],\n ): Promise<ForeignKeySchema[]>;\n\n /** Map primary key query results to column names array. */\n protected abstract mapPrimaryKeyResult(results: RawRow[]): string[] | undefined;\n\n /** Parse default value string to appropriate type. */\n protected abstract parseDefaultValue(defaultValue: string | null): unknown;\n}\n","import { SchemaAST } from '../../schema/schemaAST.js';\nimport type { ColumnNode, TableNode } from '../../schema/types.js';\nimport type { MongoQuerier, QuerierPool, SchemaIntrospector, TableSchema } from '../../type/index.js';\n\n/**\n * MongoDB schema introspector.\n * MongoDB doesn't have a fixed schema, so this primarily focuses on collections and indexes.\n */\nexport class MongoSchemaIntrospector implements SchemaIntrospector {\n constructor(private readonly pool: QuerierPool) {}\n\n async introspect(): Promise<SchemaAST> {\n const tableNames = await this.getTableNames();\n const ast = new SchemaAST();\n\n for (const name of tableNames) {\n const schema = await this.getTableSchema(name);\n if (schema) {\n const columns = new Map<string, ColumnNode>();\n const table: TableNode = {\n name,\n columns,\n primaryKey: [],\n indexes: [],\n schema: ast,\n incomingRelations: [],\n outgoingRelations: [],\n };\n\n if (schema.indexes) {\n for (const idx of schema.indexes) {\n const indexColumns: ColumnNode[] = [];\n for (const colName of idx.columns) {\n let column = columns.get(colName);\n if (!column) {\n column = {\n name: colName,\n type: { category: 'string' }, // MongoDB fields are flexible, but indexes usually target strings/numbers\n nullable: true,\n isPrimaryKey: false,\n isAutoIncrement: false,\n isUnique: false,\n table,\n referencedBy: [],\n };\n columns.set(colName, column);\n }\n indexColumns.push(column);\n }\n table.indexes.push({\n name: idx.name,\n table,\n columns: indexColumns,\n unique: idx.unique,\n });\n }\n }\n\n ast.addTable(table);\n }\n }\n\n return ast;\n }\n\n async getTableSchema(tableName: string): Promise<TableSchema | undefined> {\n const querier = await this.pool.getQuerier();\n try {\n const { db } = querier as MongoQuerier;\n const collections = await db.listCollections({ name: tableName }).toArray();\n if (collections.length === 0) {\n return undefined;\n }\n\n // MongoDB doesn't have a fixed schema, but we can look at the indexes\n const indexes = await db.collection(tableName).indexes();\n\n return {\n name: tableName,\n columns: [], // We don't have columns in Mongo\n indexes: indexes.map((idx) => ({\n name: idx.name ?? Object.keys(idx.key).join('_'),\n columns: Object.keys(idx.key),\n unique: !!idx.unique,\n })),\n };\n } finally {\n await querier.release();\n }\n }\n\n async getTableNames(): Promise<string[]> {\n const querier = await this.pool.getQuerier();\n try {\n const { db } = querier as MongoQuerier;\n const collections = await db.listCollections().toArray();\n return collections.map((c: { name: string }) => c.name);\n } finally {\n await querier.release();\n }\n }\n\n async tableExists(tableName: string): Promise<boolean> {\n const names = await this.getTableNames();\n return names.includes(tableName);\n }\n}\n","import type { AbstractSqlDialect } from '../../dialect/index.js';\nimport type { ColumnSchema, ForeignKeySchema, IndexSchema, QuerierPool, SqlQuerier } from '../../type/index.js';\nimport { AbstractSqlSchemaIntrospector } from './abstractSqlSchemaIntrospector.js';\n\n/**\n * MySQL/MariaDB schema introspector.\n * Works with both MySQL and MariaDB as they share the same information_schema structure.\n */\nexport class MysqlSchemaIntrospector extends AbstractSqlSchemaIntrospector {\n constructor(protected readonly pool: QuerierPool) {\n super(pool.dialect as AbstractSqlDialect);\n }\n\n // ============================================================================\n // SQL Queries (dialect-specific)\n // ============================================================================\n\n protected getTableNamesQuery(): string {\n return /*sql*/ `\n SELECT TABLE_NAME as table_name\n FROM information_schema.TABLES\n WHERE TABLE_SCHEMA = DATABASE()\n AND TABLE_TYPE = 'BASE TABLE'\n ORDER BY TABLE_NAME\n `;\n }\n\n protected tableExistsQuery(): string {\n return /*sql*/ `\n SELECT COUNT(*) as count\n FROM information_schema.TABLES\n WHERE TABLE_SCHEMA = DATABASE()\n AND TABLE_NAME = ?\n `;\n }\n\n protected parseTableExistsResult(results: { count?: number | bigint }[]): boolean {\n const row = results[0];\n if (row?.count !== undefined) {\n return (this.toNumber(row.count) ?? 0) > 0;\n }\n return false;\n }\n\n protected getColumnsQuery(_tableName: string): string {\n return /*sql*/ `\n SELECT\n COLUMN_NAME as column_name,\n DATA_TYPE as data_type,\n COLUMN_TYPE as column_type,\n IS_NULLABLE as is_nullable,\n COLUMN_DEFAULT as column_default,\n CHARACTER_MAXIMUM_LENGTH as character_maximum_length,\n NUMERIC_PRECISION as numeric_precision,\n NUMERIC_SCALE as numeric_scale,\n COLUMN_KEY as column_key,\n EXTRA as extra,\n COLUMN_COMMENT as column_comment\n FROM information_schema.COLUMNS\n WHERE TABLE_SCHEMA = DATABASE()\n AND TABLE_NAME = ?\n ORDER BY ORDINAL_POSITION\n `;\n }\n\n protected getIndexesQuery(_tableName: string): string {\n return /*sql*/ `\n SELECT\n INDEX_NAME as index_name,\n GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX) as columns,\n NOT NON_UNIQUE as is_unique\n FROM information_schema.STATISTICS\n WHERE TABLE_SCHEMA = DATABASE()\n AND TABLE_NAME = ?\n AND INDEX_NAME != 'PRIMARY'\n GROUP BY INDEX_NAME, NON_UNIQUE\n ORDER BY INDEX_NAME\n `;\n }\n\n protected getForeignKeysQuery(_tableName: string): string {\n return /*sql*/ `\n SELECT\n kcu.CONSTRAINT_NAME as constraint_name,\n GROUP_CONCAT(kcu.COLUMN_NAME ORDER BY kcu.ORDINAL_POSITION) as columns,\n kcu.REFERENCED_TABLE_NAME as referenced_table,\n GROUP_CONCAT(kcu.REFERENCED_COLUMN_NAME ORDER BY kcu.ORDINAL_POSITION) as referenced_columns,\n rc.DELETE_RULE as delete_rule,\n rc.UPDATE_RULE as update_rule\n FROM information_schema.KEY_COLUMN_USAGE kcu\n JOIN information_schema.REFERENTIAL_CONSTRAINTS rc\n ON kcu.CONSTRAINT_NAME = rc.CONSTRAINT_NAME\n AND kcu.TABLE_SCHEMA = rc.CONSTRAINT_SCHEMA\n WHERE kcu.TABLE_SCHEMA = DATABASE()\n AND kcu.TABLE_NAME = ?\n AND kcu.REFERENCED_TABLE_NAME IS NOT NULL\n GROUP BY kcu.CONSTRAINT_NAME, kcu.REFERENCED_TABLE_NAME, rc.DELETE_RULE, rc.UPDATE_RULE\n ORDER BY kcu.CONSTRAINT_NAME\n `;\n }\n\n protected getPrimaryKeyQuery(_tableName: string): string {\n return /*sql*/ `\n SELECT COLUMN_NAME as column_name\n FROM information_schema.KEY_COLUMN_USAGE\n WHERE TABLE_SCHEMA = DATABASE()\n AND TABLE_NAME = ?\n AND CONSTRAINT_NAME = 'PRIMARY'\n ORDER BY ORDINAL_POSITION\n `;\n }\n\n // ============================================================================\n // Internal Types\n // ============================================================================\n\n protected mapTableNameRow(row: { table_name: string }): string {\n return row.table_name;\n }\n\n protected async mapColumnsResult(\n _querier: SqlQuerier,\n _tableName: string,\n results: MysqlColumnRow[],\n ): Promise<ColumnSchema[]> {\n return results.map((row) => ({\n name: row.column_name,\n type: (row.column_type || '').toUpperCase(),\n nullable: row.is_nullable === 'YES',\n defaultValue: this.parseDefaultValue(row.column_default),\n isPrimaryKey: row.column_key === 'PRI',\n isAutoIncrement: (row.extra || '').toLowerCase().includes('auto_increment'),\n isUnique: row.column_key === 'UNI',\n length: this.toNumber(row.character_maximum_length),\n precision: this.toNumber(row.numeric_precision),\n scale: this.toNumber(row.numeric_scale),\n comment: row.column_comment || undefined,\n }));\n }\n\n protected async mapIndexesResult(\n _querier: SqlQuerier,\n _tableName: string,\n results: { index_name: string; columns: string; is_unique: number }[],\n ): Promise<IndexSchema[]> {\n return results.map((row) => ({\n name: row.index_name,\n columns: (row.columns || '').split(','),\n unique: Boolean(row.is_unique),\n }));\n }\n\n protected async mapForeignKeysResult(\n _querier: SqlQuerier,\n _tableName: string,\n results: {\n constraint_name: string;\n columns: string;\n referenced_table: string;\n referenced_columns: string;\n delete_rule: string;\n update_rule: string;\n }[],\n ): Promise<ForeignKeySchema[]> {\n return results.map((row) => ({\n name: row.constraint_name,\n columns: (row.columns || '').split(','),\n referencedTable: row.referenced_table,\n referencedColumns: (row.referenced_columns || '').split(','),\n onDelete: this.normalizeReferentialAction(row.delete_rule),\n onUpdate: this.normalizeReferentialAction(row.update_rule),\n }));\n }\n\n protected mapPrimaryKeyResult(results: { column_name: string }[]): string[] | undefined {\n if (results.length === 0) {\n return undefined;\n }\n return results.map((r) => r.column_name);\n }\n\n protected parseDefaultValue(defaultValue: string | null): unknown {\n if (defaultValue === null) {\n return undefined;\n }\n const normalized = defaultValue.toUpperCase();\n if (normalized === 'NULL') {\n return null;\n }\n if (normalized === 'CURRENT_TIMESTAMP' || normalized === 'CURRENT_TIMESTAMP()') {\n return 'CURRENT_TIMESTAMP';\n }\n if (/^-?\\d+$/.test(defaultValue)) {\n return Number.parseInt(defaultValue, 10);\n }\n if (/^-?\\d+\\.\\d+$/.test(defaultValue)) {\n return Number.parseFloat(defaultValue);\n }\n\n if (defaultValue?.startsWith(\"'\") && defaultValue?.endsWith(\"'\")) {\n return defaultValue.slice(1, -1);\n }\n\n return defaultValue;\n }\n}\n\ntype MysqlColumnRow = {\n column_name: string;\n column_type: string;\n is_nullable: string;\n column_default: string | null;\n column_key: string;\n extra: string;\n character_maximum_length: number | bigint | null;\n numeric_precision: number | bigint | null;\n numeric_scale: number | null;\n column_comment: string | null;\n};\n\n/**\n * Alias for MysqlSchemaIntrospector.\n * MariaDB uses the same information_schema structure as MySQL.\n */\nexport const MariadbSchemaIntrospector = MysqlSchemaIntrospector;\n","import type { AbstractSqlDialect } from '../../dialect/index.js';\nimport type { ColumnSchema, ForeignKeySchema, IndexSchema, QuerierPool, RawRow, SqlQuerier } from '../../type/index.js';\nimport { AbstractSqlSchemaIntrospector } from './abstractSqlSchemaIntrospector.js';\n\n/**\n * PostgreSQL schema introspector\n */\nexport class PostgresSchemaIntrospector extends AbstractSqlSchemaIntrospector {\n constructor(protected readonly pool: QuerierPool) {\n super(pool.dialect as AbstractSqlDialect);\n }\n\n // ============================================================================\n // SQL Queries (dialect-specific)\n // ============================================================================\n\n protected getTableNamesQuery(): string {\n return /*sql*/ `\n SELECT table_name\n FROM information_schema.tables\n WHERE table_schema = 'public'\n AND table_type = 'BASE TABLE'\n ORDER BY table_name\n `;\n }\n\n protected tableExistsQuery(): string {\n return /*sql*/ `\n SELECT EXISTS (\n SELECT FROM information_schema.tables\n WHERE table_schema = 'public'\n AND table_name = $1\n ) AS exists\n `;\n }\n\n protected parseTableExistsResult(results: RawRow[]): boolean {\n return (results[0]?.['exists'] as boolean) ?? false;\n }\n\n protected getColumnsQuery(_tableName: string): string {\n return /*sql*/ `\n SELECT\n c.column_name,\n c.data_type,\n c.udt_name,\n c.is_nullable,\n c.column_default,\n c.character_maximum_length,\n c.numeric_precision,\n c.numeric_scale,\n c.is_identity,\n c.identity_generation,\n COALESCE(\n (SELECT TRUE FROM information_schema.table_constraints tc\n JOIN information_schema.key_column_usage kcu\n ON tc.constraint_name = kcu.constraint_name\n WHERE tc.table_name = c.table_name\n AND tc.constraint_type = 'PRIMARY KEY'\n AND kcu.column_name = c.column_name\n LIMIT 1),\n FALSE\n ) AS is_primary_key,\n COALESCE(\n (SELECT TRUE FROM information_schema.table_constraints tc\n JOIN information_schema.key_column_usage kcu\n ON tc.constraint_name = kcu.constraint_name\n WHERE tc.table_name = c.table_name\n AND tc.constraint_type = 'UNIQUE'\n AND kcu.column_name = c.column_name\n LIMIT 1),\n FALSE\n ) AS is_unique,\n pg_catalog.col_description(\n (SELECT oid FROM pg_catalog.pg_class WHERE relname = c.table_name),\n c.ordinal_position\n ) AS column_comment\n FROM information_schema.columns c\n WHERE c.table_schema = 'public'\n AND c.table_name = $1\n ORDER BY c.ordinal_position\n `;\n }\n\n protected getIndexesQuery(_tableName: string): string {\n return /*sql*/ `\n SELECT\n i.relname AS index_name,\n array_to_json(array_agg(a.attname ORDER BY k.n)) AS columns,\n ix.indisunique AS is_unique\n FROM pg_class t\n JOIN pg_index ix ON t.oid = ix.indrelid\n JOIN pg_class i ON i.oid = ix.indexrelid\n JOIN pg_namespace n ON n.oid = t.relnamespace\n CROSS JOIN LATERAL unnest(ix.indkey) WITH ORDINALITY AS k(attnum, n)\n JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = k.attnum\n WHERE t.relname = $1\n AND n.nspname = 'public'\n AND NOT ix.indisprimary\n GROUP BY i.relname, ix.indisunique\n ORDER BY i.relname\n `;\n }\n\n protected getForeignKeysQuery(_tableName: string): string {\n return /*sql*/ `\n SELECT\n tc.constraint_name,\n array_to_json(array_agg(kcu.column_name ORDER BY kcu.ordinal_position)) AS columns,\n ccu.table_name AS referenced_table,\n array_to_json(array_agg(ccu.column_name ORDER BY kcu.ordinal_position)) AS referenced_columns,\n rc.delete_rule,\n rc.update_rule\n FROM information_schema.table_constraints tc\n JOIN information_schema.key_column_usage kcu\n ON tc.constraint_name = kcu.constraint_name\n AND tc.table_schema = kcu.table_schema\n JOIN information_schema.constraint_column_usage ccu\n ON ccu.constraint_name = tc.constraint_name\n AND ccu.table_schema = tc.table_schema\n JOIN information_schema.referential_constraints rc\n ON rc.constraint_name = tc.constraint_name\n AND rc.constraint_schema = tc.table_schema\n WHERE tc.constraint_type = 'FOREIGN KEY'\n AND tc.table_name = $1\n AND tc.table_schema = 'public'\n GROUP BY tc.constraint_name, ccu.table_name, rc.delete_rule, rc.update_rule\n ORDER BY tc.constraint_name\n `;\n }\n\n protected getPrimaryKeyQuery(_tableName: string): string {\n return /*sql*/ `\n SELECT kcu.column_name\n FROM information_schema.table_constraints tc\n JOIN information_schema.key_column_usage kcu\n ON tc.constraint_name = kcu.constraint_name\n AND tc.table_schema = kcu.table_schema\n WHERE tc.constraint_type = 'PRIMARY KEY'\n AND tc.table_name = $1\n AND tc.table_schema = 'public'\n ORDER BY kcu.ordinal_position\n `;\n }\n\n // ============================================================================\n // Internal Types\n // ============================================================================\n\n protected mapTableNameRow(row: { table_name: string }): string {\n return row.table_name;\n }\n\n protected async mapColumnsResult(\n _querier: SqlQuerier,\n _tableName: string,\n results: PostgresColumnRow[],\n ): Promise<ColumnSchema[]> {\n return results.map((row) => ({\n name: row.column_name,\n type: this.normalizeType(row.data_type, row.udt_name),\n nullable: row.is_nullable === 'YES',\n defaultValue: this.parseDefaultValue(row.column_default),\n isPrimaryKey: row.is_primary_key,\n isAutoIncrement: this.isAutoIncrement(row.column_default, row.is_identity),\n isUnique: row.is_unique,\n length: row.character_maximum_length ?? undefined,\n precision: row.numeric_precision ?? undefined,\n scale: row.numeric_scale ?? undefined,\n comment: row.column_comment ?? undefined,\n }));\n }\n\n protected async mapIndexesResult(\n _querier: SqlQuerier,\n _tableName: string,\n results: { index_name: string; columns: string[]; is_unique: boolean }[],\n ): Promise<IndexSchema[]> {\n return results.map((row) => ({\n name: row.index_name,\n columns: row.columns,\n unique: row.is_unique,\n }));\n }\n\n protected async mapForeignKeysResult(\n _querier: SqlQuerier,\n _tableName: string,\n results: {\n constraint_name: string;\n columns: string[];\n referenced_table: string;\n referenced_columns: string[];\n delete_rule: string;\n update_rule: string;\n }[],\n ): Promise<ForeignKeySchema[]> {\n return results.map((row) => ({\n name: row.constraint_name,\n columns: row.columns,\n referencedTable: row.referenced_table,\n referencedColumns: row.referenced_columns,\n onDelete: this.normalizeReferentialAction(row.delete_rule),\n onUpdate: this.normalizeReferentialAction(row.update_rule),\n }));\n }\n\n protected mapPrimaryKeyResult(results: { column_name: string }[]): string[] | undefined {\n if (results.length === 0) {\n return undefined;\n }\n return results.map((r) => r.column_name);\n }\n\n // ============================================================================\n // PostgreSQL-specific helpers\n // ============================================================================\n\n protected normalizeType(dataType: string, udtName: string): string {\n // Handle user-defined types and arrays\n if (dataType === 'USER-DEFINED') {\n return udtName.toUpperCase();\n }\n if (dataType === 'ARRAY') {\n return `${udtName.replace(/^_/, '').toUpperCase()}[]`;\n }\n return dataType.toUpperCase();\n }\n\n protected parseDefaultValue(defaultValue: string | null): unknown {\n if (!defaultValue) {\n return undefined;\n }\n\n // Remove type casting (e.g., ::text, ::character varying, ::text[])\n const cleaned = defaultValue.replace(/::[a-z_]+(\\s+[a-z_]+)?(\\[\\])?/gi, '').trim();\n\n if (cleaned.startsWith(\"'\") && cleaned.endsWith(\"'\")) {\n return cleaned.slice(1, -1);\n }\n if (cleaned === 'true' || cleaned === 'false') {\n return cleaned === 'true';\n }\n if (cleaned === 'NULL') {\n return null;\n }\n if (/^-?\\d+$/.test(cleaned)) {\n return Number.parseInt(cleaned, 10);\n }\n if (/^-?\\d+\\.\\d+$/.test(cleaned)) {\n return Number.parseFloat(cleaned);\n }\n\n // Return cleaned value for functions like CURRENT_TIMESTAMP, nextval(), etc.\n return cleaned;\n }\n\n protected isAutoIncrement(columnDefault: string | null, isIdentity: string): boolean {\n // PostgreSQL identity columns (GENERATED ... AS IDENTITY)\n if (isIdentity === 'YES') {\n return true;\n }\n // Serial/bigserial columns use nextval()\n return columnDefault?.includes('nextval(') ?? false;\n }\n}\n\ntype PostgresColumnRow = {\n column_name: string;\n data_type: string;\n udt_name: string;\n is_nullable: string;\n column_default: string | null;\n is_primary_key: boolean;\n is_identity: string;\n is_unique: boolean;\n character_maximum_length: number | null;\n numeric_precision: number | null;\n numeric_scale: number | null;\n column_comment: string | null;\n};\n","import type { AbstractSqlDialect } from '../../dialect/index.js';\nimport type { ColumnSchema, ForeignKeySchema, IndexSchema, QuerierPool, SqlQuerier } from '../../type/index.js';\nimport { AbstractSqlSchemaIntrospector } from './abstractSqlSchemaIntrospector.js';\n\n/**\n * SQLite schema introspector\n */\nexport class SqliteSchemaIntrospector extends AbstractSqlSchemaIntrospector {\n constructor(protected readonly pool: QuerierPool) {\n super(pool.dialect as AbstractSqlDialect);\n }\n\n // ============================================================================\n // SQL Queries (dialect-specific)\n // ============================================================================\n\n protected getTableNamesQuery(): string {\n return /*sql*/ `\n SELECT name\n FROM sqlite_master\n WHERE type = 'table'\n AND name NOT LIKE 'sqlite_%'\n ORDER BY name\n `;\n }\n\n protected tableExistsQuery(): string {\n return /*sql*/ `\n SELECT COUNT(*) as count\n FROM sqlite_master\n WHERE type = 'table'\n AND name = ?\n `;\n }\n\n protected parseTableExistsResult(results: SqliteCountRow[]): boolean {\n const row = results[0];\n if (row?.count !== undefined) {\n return (this.toNumber(row.count) ?? 0) > 0;\n }\n return false;\n }\n\n // SQLite uses PRAGMA which doesn't use parameterized queries in the same way\n protected getColumnsQuery(tableName: string): string {\n return `PRAGMA table_info(${this.escapeId(tableName)})`;\n }\n\n protected getIndexesQuery(tableName: string): string {\n return `PRAGMA index_list(${this.escapeId(tableName)})`;\n }\n\n protected getForeignKeysQuery(tableName: string): string {\n return `PRAGMA foreign_key_list(${this.escapeId(tableName)})`;\n }\n\n protected getPrimaryKeyQuery(tableName: string): string {\n return `PRAGMA table_info(${this.escapeId(tableName)})`;\n }\n\n protected override getColumnsParams(_tableName: string): unknown[] {\n return [];\n }\n\n protected override getIndexesParams(_tableName: string): unknown[] {\n return [];\n }\n\n protected override getForeignKeysParams(_tableName: string): unknown[] {\n return [];\n }\n\n protected override getPrimaryKeyParams(_tableName: string): unknown[] {\n return [];\n }\n\n // ============================================================================\n // Row Mapping (dialect-specific)\n // ============================================================================\n\n protected mapTableNameRow(row: { name: string }): string {\n return row.name;\n }\n\n protected async mapColumnsResult(\n querier: SqlQuerier,\n tableName: string,\n results: SqliteColumnRow[],\n ): Promise<ColumnSchema[]> {\n // Get unique columns from indexes\n const uniqueColumns = await this.getUniqueColumns(querier, tableName);\n\n return results.map(\n (row): ColumnSchema => ({\n name: row.name,\n type: this.normalizeType(row.type),\n nullable: row.notnull === 0,\n defaultValue: this.parseDefaultValue(row.dflt_value),\n isPrimaryKey: row.pk > 0,\n isAutoIncrement: row.pk > 0 && row.type.toUpperCase() === 'INTEGER',\n isUnique: uniqueColumns.has(row.name),\n length: this.extractLength(row.type),\n precision: undefined,\n scale: undefined,\n comment: undefined, // SQLite doesn't support column comments\n }),\n );\n }\n\n protected async mapIndexesResult(\n querier: SqlQuerier,\n _tableName: string,\n results: SqliteIndexRow[],\n ): Promise<IndexSchema[]> {\n const indexSchemas: IndexSchema[] = [];\n\n for (const index of results) {\n const columns = await querier.all<{ name: string }>(`PRAGMA index_info(${this.escapeId(index.name)})`);\n\n // Include user-created indexes ('c') and multi-column unique constraints ('u')\n // Skip primary key indexes ('pk') and single-column unique constraints\n const isUserCreated = index.origin === 'c';\n const isCompositeUnique = index.origin === 'u' && columns.length > 1;\n\n if (isUserCreated || isCompositeUnique) {\n indexSchemas.push({\n name: index.name,\n columns: columns.map((c) => c.name),\n unique: Boolean(index.unique),\n });\n }\n }\n\n return indexSchemas;\n }\n\n protected async mapForeignKeysResult(\n _querier: SqlQuerier,\n tableName: string,\n results: SqliteForeignKeyRow[],\n ): Promise<ForeignKeySchema[]> {\n // Group by id to handle composite foreign keys\n const grouped = new Map<number, SqliteForeignKeyRow[]>();\n for (const row of results) {\n const id = row.id;\n const existing = grouped.get(id) ?? [];\n existing.push(row);\n grouped.set(id, existing);\n }\n\n return Array.from(grouped.entries()).map(([id, rows]) => {\n const first = rows[0];\n return {\n name: `fk_${tableName}_${id}`,\n columns: rows.map((r) => r.from),\n referencedTable: first.table,\n referencedColumns: rows.map((r) => r.to),\n onDelete: this.normalizeReferentialAction(first.on_delete),\n onUpdate: this.normalizeReferentialAction(first.on_update),\n };\n });\n }\n\n protected mapPrimaryKeyResult(results: SqliteColumnRow[]): string[] | undefined {\n const pkColumns = results.filter((r) => r.pk > 0).sort((a, b) => a.pk - b.pk);\n\n if (pkColumns.length === 0) {\n return undefined;\n }\n\n return pkColumns.map((r) => r.name);\n }\n\n // ============================================================================\n // SQLite-specific helpers\n // ============================================================================\n\n private async getUniqueColumns(querier: SqlQuerier, tableName: string): Promise<Set<string>> {\n const results = await querier.all<SqliteIndexRow>(`PRAGMA index_list(${this.escapeId(tableName)})`);\n const uniqueColumns = new Set<string>();\n\n for (const index of results) {\n if (index.unique) {\n const indexInfo = await querier.all<{ name: string }>(`PRAGMA index_info(${this.escapeId(index.name)})`);\n // Only single-column unique constraints\n if (indexInfo.length === 1) {\n uniqueColumns.add(indexInfo[0].name);\n }\n }\n }\n\n return uniqueColumns;\n }\n\n protected normalizeType(type: string): string {\n // Extract base type without length/precision\n const match = type.match(/^([A-Za-z]+)/);\n return match ? match[1].toUpperCase() : type.toUpperCase();\n }\n\n protected extractLength(type: string): number | undefined {\n const match = type.match(/\\((\\d+)\\)/);\n return match ? Number.parseInt(match[1], 10) : undefined;\n }\n\n protected parseDefaultValue(defaultValue: string | null): unknown {\n if (defaultValue === null) {\n return undefined;\n }\n\n if (defaultValue === 'NULL') {\n return null;\n }\n if (defaultValue === 'CURRENT_TIMESTAMP' || defaultValue === 'CURRENT_DATE' || defaultValue === 'CURRENT_TIME') {\n return defaultValue;\n }\n if (/^'.*'$/.test(defaultValue)) {\n return defaultValue.slice(1, -1);\n }\n if (/^-?\\d+$/.test(defaultValue)) {\n return Number.parseInt(defaultValue, 10);\n }\n if (typeof defaultValue !== 'string') {\n return defaultValue;\n }\n\n if (/^-?\\d+\\.\\d+$/.test(defaultValue)) {\n return Number.parseFloat(defaultValue);\n }\n\n const upper = defaultValue.toUpperCase();\n if (upper === 'TRUE') return 1;\n if (upper === 'FALSE') return 0;\n\n return defaultValue;\n }\n}\n\ntype SqliteCountRow = {\n count: number | bigint;\n};\n\ntype SqliteColumnRow = {\n name: string;\n type: string;\n notnull: number;\n dflt_value: string | null;\n pk: number;\n};\n\ntype SqliteIndexRow = {\n seq: number;\n name: string;\n unique: number;\n origin: string;\n partial: number;\n};\n\ntype SqliteForeignKeyRow = {\n id: number;\n seq: number;\n table: string;\n from: string;\n to: string;\n on_update: string;\n on_delete: string;\n match: string;\n};\n","/**\n * Schema AST Module\n *\n * Provides a unified graph representation of database schema for:\n * - Schema diffing and migration generation\n * - Entity code generation from database\n * - Drift detection\n * - Smart relation inference\n */\n\nimport type { SchemaIntrospector } from '../type/migration.js';\nimport type { SchemaAST } from './schemaAST.js';\n\n// Canonical type utilities\nexport {\n areTypesEqual,\n canonicalToColumnType,\n canonicalToSql,\n canonicalToTypeScript,\n fieldOptionsToCanonical,\n isBreakingTypeChange,\n sqlToCanonical,\n} from './canonicalType.js';\n\n/**\n * Introspect the database and build a SchemaAST from it.\n *\n * @param introspector - The schema introspector to use\n * @returns The SchemaAST representing the database schema\n */\nexport async function introspectSchema(introspector: SchemaIntrospector): Promise<SchemaAST> {\n return introspector.introspect();\n}\n// SchemaAST class\nexport { SchemaAST } from './schemaAST.js';\nexport type { BuildFromEntitiesOptions } from './schemaASTBuilder.js';\n\n// Builder\nexport { SchemaASTBuilder } from './schemaASTBuilder.js';\nexport type { DiffOptions } from './schemaASTDiffer.js';\n\n// Differ\nexport { diffSchemas, SchemaASTDiffer } from './schemaASTDiffer.js';\n// Types\nexport type {\n // Core node types\n CanonicalType,\n // Diff types\n ColumnDiff,\n ColumnNode,\n ConflictResolution,\n // Relation detection types\n DetectedRelation,\n // Drift detection types\n Drift,\n DriftReport,\n DriftSeverity,\n DriftStatus,\n DriftType,\n ForeignKeyAction,\n IndexDiff,\n IndexNode,\n IndexSource,\n IndexSyncStatus,\n IndexType,\n RelationshipDiff,\n RelationshipNode,\n RelationshipSource,\n RelationshipType,\n SchemaAST as ISchemaAST,\n SchemaDiffResult,\n SizeVariant,\n // Sync types\n SyncDirection,\n SyncOptions,\n TableDiff,\n TableNode,\n // Type categories and variants\n TypeCategory,\n // Validation types\n ValidationError,\n ValidationErrorType,\n} from './types.js';\n","import type { AbstractDialect } from '../dialect/abstractDialect.js';\nimport type { ForeignKeyAction } from '../schema/types.js';\nimport type { NamingStrategy, SchemaGenerator } from '../type/index.js';\nimport { createSchemaGenerator } from './schemaGenerator.js';\n\n/**\n * Async factory for schema generators. Use this for MongoDB so the optional peer\n * `mongodb` is only loaded when this path runs. SQL dialects delegate to {@link createSchemaGenerator}.\n */\nexport async function createSchemaGeneratorAsync(\n dialect: AbstractDialect,\n namingStrategy?: NamingStrategy,\n defaultForeignKeyAction?: ForeignKeyAction,\n): Promise<SchemaGenerator | undefined> {\n if (dialect.dialectName === 'mongodb') {\n const { MongoSchemaGenerator } = await import('./generator/mongoSchemaGenerator.js');\n return new MongoSchemaGenerator(namingStrategy, defaultForeignKeyAction);\n }\n return createSchemaGenerator(dialect, namingStrategy, defaultForeignKeyAction);\n}\n","import type { MigrationStorage, QuerierPool, SqlQuerier } from '../../type/index.js';\nimport { isSqlQuerier } from '../../type/index.js';\nimport { acquireQuerierForMigrations } from '../acquireQuerierForMigrations.js';\n\n/**\n * Migration metadata stored in the database\n */\ninterface MigrationRecord {\n name: string;\n executed_at: Date | number;\n}\n\n/**\n * Stores migration state in a database table.\n * Uses the querier's dialect for escaping and placeholders.\n */\nexport class DatabaseMigrationStorage implements MigrationStorage {\n private readonly tableName: string;\n private storageInitialized = false;\n\n constructor(\n private readonly pool: QuerierPool,\n options: {\n tableName?: string;\n } = {},\n ) {\n this.tableName = options.tableName ?? 'uql_migrations';\n }\n\n async ensureStorage(): Promise<void> {\n if (this.storageInitialized) {\n return;\n }\n\n const querier = await acquireQuerierForMigrations(this.pool);\n\n if (!isSqlQuerier(querier)) {\n await querier.release();\n throw new Error('DatabaseMigrationStorage requires a SQL-based querier');\n }\n\n try {\n await this.createTableIfNotExists(querier);\n this.storageInitialized = true;\n } finally {\n await querier.release();\n }\n }\n\n private async createTableIfNotExists(querier: SqlQuerier): Promise<void> {\n const { dialect } = querier;\n const sql = `\n CREATE TABLE IF NOT EXISTS ${dialect.escapeId(this.tableName)} (\n ${dialect.escapeId('name')} VARCHAR(255) PRIMARY KEY,\n ${dialect.escapeId('executed_at')} TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n )\n `;\n\n await querier.run(sql);\n }\n\n async executed(): Promise<string[]> {\n await this.ensureStorage();\n\n const querier = await acquireQuerierForMigrations(this.pool);\n\n if (!isSqlQuerier(querier)) {\n await querier.release();\n throw new Error('DatabaseMigrationStorage requires a SQL-based querier');\n }\n\n try {\n const { dialect } = querier;\n const sql = `SELECT ${dialect.escapeId('name')} FROM ${dialect.escapeId(this.tableName)} ORDER BY ${dialect.escapeId('name')} ASC`;\n const results = await querier.all<MigrationRecord>(sql);\n return results.map((r) => r.name);\n } finally {\n await querier.release();\n }\n }\n\n /**\n * Log a migration as executed - uses provided querier (within transaction)\n */\n async logWithQuerier(querier: SqlQuerier, migrationName: string): Promise<void> {\n await this.ensureStorage();\n const { dialect } = querier;\n const sql = `INSERT INTO ${dialect.escapeId(this.tableName)} (${dialect.escapeId('name')}) VALUES (${dialect.placeholder(1)})`;\n await querier.run(sql, [migrationName]);\n }\n\n /**\n * Unlog a migration - uses provided querier (within transaction)\n */\n async unlogWithQuerier(querier: SqlQuerier, migrationName: string): Promise<void> {\n await this.ensureStorage();\n const { dialect } = querier;\n const sql = `DELETE FROM ${dialect.escapeId(this.tableName)} WHERE ${dialect.escapeId('name')} = ${dialect.placeholder(1)}`;\n await querier.run(sql, [migrationName]);\n }\n}\n","import { mkdir, readdir, writeFile } from 'node:fs/promises';\nimport { basename, extname, join } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport { getEntities, getMeta } from '../entity/index.js';\nimport { introspectSchema } from '../schema/index.js';\nimport type {\n DialectName,\n LoggingOptions,\n Migration,\n MigrationDefinition,\n MigrationResult,\n MigrationStorage,\n MigratorOptions,\n MongoQuerier,\n NamingStrategy,\n Querier,\n QuerierPool,\n SchemaDiff,\n SchemaGenerator,\n SchemaIntrospector,\n Type,\n} from '../type/index.js';\nimport { isKnownMigratorDialect, isSqlQuerier } from '../type/index.js';\nimport { LoggerWrapper } from '../util/index.js';\nimport { acquireQuerierForMigrations } from './acquireQuerierForMigrations.js';\nimport type { IMigrationBuilder } from './builder/types.js';\nimport {\n buildSqlQuerierMigrationModule,\n EMPTY_MANUAL_MIGRATION_DOWN_INNER,\n EMPTY_MANUAL_MIGRATION_UP_INNER,\n emitSqlRunCalls,\n} from './codegen/migrationFile.js';\nimport {\n MongoSchemaIntrospector,\n MysqlSchemaIntrospector,\n PostgresSchemaIntrospector,\n SqliteSchemaIntrospector,\n} from './introspection/index.js';\nimport { createSchemaGenerator } from './schemaGenerator.js';\nimport { createSchemaGeneratorAsync } from './schemaGeneratorAsync.js';\nimport { DatabaseMigrationStorage } from './storage/databaseStorage.js';\n\n/**\n * Main class for managing database migrations\n */\nexport class Migrator {\n public readonly storage: MigrationStorage;\n public readonly migrationsPath: string;\n\n private _logger: LoggerWrapper;\n public get logger(): LoggerWrapper {\n return this._logger;\n }\n public set logger(value: LoggingOptions) {\n this._logger = new LoggerWrapper(value);\n }\n private readonly _entities?: Type<unknown>[];\n\n public get entities(): Type<unknown>[] {\n return this._entities ?? getEntities();\n }\n public readonly dialectName: DialectName;\n public schemaGenerator?: SchemaGenerator;\n public schemaIntrospector?: SchemaIntrospector;\n private readonly _namingStrategy?: NamingStrategy;\n private _mongoSchemaLoadPromise?: Promise<void>;\n\n constructor(\n private readonly pool: QuerierPool,\n options: MigratorOptions = {},\n ) {\n this.dialectName = pool.dialect.dialectName ?? 'postgres';\n this._namingStrategy = options.namingStrategy;\n this.storage =\n options.storage ??\n new DatabaseMigrationStorage(pool, {\n tableName: options.tableName,\n });\n this.migrationsPath = options.migrationsPath ?? './migrations';\n this._logger = new LoggerWrapper(options.logger!, options.slowQuery);\n this._entities = options.entities;\n this.schemaIntrospector = this.createIntrospector();\n this.schemaGenerator =\n options.schemaGenerator ??\n (this.dialectName === 'mongodb' ? undefined : this.createGenerator(options.namingStrategy));\n }\n\n /** Loads MongoDB schema generator on first use; SQL generators are set in the constructor (or via {@link setSchemaGenerator}). */\n private async ensureSchemaGenerator(): Promise<void> {\n if (this.schemaGenerator || this.dialectName !== 'mongodb') {\n return;\n }\n if (!this._mongoSchemaLoadPromise) {\n this._mongoSchemaLoadPromise = createSchemaGeneratorAsync(this.pool.dialect, this._namingStrategy).then((gen) => {\n if (gen) {\n this.schemaGenerator = gen;\n }\n });\n }\n await this._mongoSchemaLoadPromise;\n }\n\n /**\n * Set the schema generator for DDL operations\n */\n setSchemaGenerator(generator: SchemaGenerator): void {\n this.schemaGenerator = generator;\n }\n\n protected createIntrospector(): SchemaIntrospector | undefined {\n const d = this.dialectName;\n if (!isKnownMigratorDialect(d)) {\n return undefined;\n }\n switch (d) {\n case 'postgres':\n case 'cockroachdb':\n return new PostgresSchemaIntrospector(this.pool);\n case 'mysql':\n case 'mariadb':\n return new MysqlSchemaIntrospector(this.pool);\n case 'sqlite':\n return new SqliteSchemaIntrospector(this.pool);\n case 'mongodb':\n return new MongoSchemaIntrospector(this.pool);\n default:\n return undefined;\n }\n }\n\n protected createGenerator(namingStrategy?: NamingStrategy): SchemaGenerator | undefined {\n if (!isKnownMigratorDialect(this.dialectName)) {\n return undefined;\n }\n return createSchemaGenerator(this.pool.dialect, namingStrategy);\n }\n\n /**\n * Get all discovered migrations from the migrations directory\n */\n async getMigrations(): Promise<Migration[]> {\n const files = await this.getMigrationFiles();\n const migrations: Migration[] = [];\n\n for (const file of files) {\n const migration = await this.loadMigration(file);\n if (migration) {\n migrations.push(migration);\n }\n }\n\n // Sort by name (which typically includes timestamp)\n return migrations.sort((a, b) => a.name.localeCompare(b.name));\n }\n\n /**\n * Get list of pending migrations (not yet executed)\n */\n async pending(): Promise<Migration[]> {\n const [migrations, executed] = await Promise.all([this.getMigrations(), this.storage.executed()]);\n\n const executedSet = new Set(executed);\n return migrations.filter((m) => !executedSet.has(m.name));\n }\n\n /**\n * Get list of executed migrations\n */\n async executed(): Promise<string[]> {\n return this.storage.executed();\n }\n\n /**\n * Run all pending migrations\n */\n async up(options: { to?: string; step?: number } = {}): Promise<MigrationResult[]> {\n const pendingMigrations = await this.pending();\n const results: MigrationResult[] = [];\n\n let migrationsToRun = pendingMigrations;\n\n if (options.to) {\n const toIndex = migrationsToRun.findIndex((m) => m.name === options.to);\n if (toIndex === -1) {\n throw new Error(`Migration '${options.to}' not found`);\n }\n migrationsToRun = migrationsToRun.slice(0, toIndex + 1);\n }\n\n if (options.step !== undefined) {\n migrationsToRun = migrationsToRun.slice(0, options.step);\n }\n\n for (const migration of migrationsToRun) {\n const result = await this.runMigration(migration, 'up');\n results.push(result);\n\n if (!result.success) {\n break; // Stop on first failure\n }\n }\n\n return results;\n }\n\n /**\n * Rollback migrations\n */\n async down(options: { to?: string; step?: number } = {}): Promise<MigrationResult[]> {\n const [migrations, executed] = await Promise.all([this.getMigrations(), this.storage.executed()]);\n\n const executedSet = new Set(executed);\n const executedMigrations = migrations.filter((m) => executedSet.has(m.name)).reverse(); // Rollback in reverse order\n\n const results: MigrationResult[] = [];\n let migrationsToRun = executedMigrations;\n\n if (options.to) {\n const toIndex = migrationsToRun.findIndex((m) => m.name === options.to);\n if (toIndex === -1) {\n throw new Error(`Migration '${options.to}' not found`);\n }\n migrationsToRun = migrationsToRun.slice(0, toIndex + 1);\n }\n\n if (options.step !== undefined) {\n migrationsToRun = migrationsToRun.slice(0, options.step);\n }\n\n for (const migration of migrationsToRun) {\n const result = await this.runMigration(migration, 'down');\n results.push(result);\n\n if (!result.success) {\n break; // Stop on first failure\n }\n }\n\n return results;\n }\n\n /**\n * Run a single migration within a transaction\n */\n public async runMigration(migration: Migration, direction: 'up' | 'down'): Promise<MigrationResult> {\n const startTime = Date.now();\n const querier = await acquireQuerierForMigrations(this.pool);\n\n if (!isSqlQuerier(querier)) {\n await querier.release();\n throw new Error('Migrator requires a SQL-based querier');\n }\n\n try {\n this.logger.logMigration(`${direction === 'up' ? 'Running' : 'Reverting'} migration: ${migration.name}`);\n\n await querier.beginTransaction();\n\n if (direction === 'up') {\n await migration.up(querier);\n // Log within the same transaction\n await this.storage.logWithQuerier(querier, migration.name);\n } else {\n await migration.down(querier);\n // Unlog within the same transaction\n await this.storage.unlogWithQuerier(querier, migration.name);\n }\n\n await querier.commitTransaction();\n\n const duration = Date.now() - startTime;\n this.logger.logMigration(\n `Migration ${migration.name} ${direction === 'up' ? 'applied' : 'reverted'} in ${duration}ms`,\n );\n\n return {\n name: migration.name,\n direction,\n duration,\n success: true,\n };\n } catch (error) {\n await querier.rollbackTransaction();\n\n const duration = Date.now() - startTime;\n this.logger.logError(`Migration ${migration.name} failed: ${(error as Error).message}`, error);\n\n return {\n name: migration.name,\n direction,\n duration,\n success: false,\n error: error as Error,\n };\n } finally {\n await querier.release();\n }\n }\n\n /**\n * Generate a new migration file\n */\n async generate(name: string): Promise<string> {\n const timestamp = this.getTimestamp();\n const fileName = `${timestamp}_${this.slugify(name)}.ts`;\n const filePath = join(this.migrationsPath, fileName);\n\n const content = buildSqlQuerierMigrationModule({\n migrationName: name,\n createdAt: new Date(),\n upInner: EMPTY_MANUAL_MIGRATION_UP_INNER,\n downInner: EMPTY_MANUAL_MIGRATION_DOWN_INNER,\n });\n\n await mkdir(this.migrationsPath, { recursive: true });\n await writeFile(filePath, content, 'utf-8');\n\n this.logger.logInfo(`Created migration: ${filePath}`);\n return filePath;\n }\n\n /**\n * Generate a migration based on entity schema differences\n */\n async generateFromEntities(name: string): Promise<string> {\n await this.ensureSchemaGenerator();\n if (!this.schemaGenerator) {\n throw new Error('Schema generator not set. Call setSchemaGenerator() first.');\n }\n\n const diffs = await this.getDiffs();\n const upStatements: string[] = [];\n const downStatements: string[] = [];\n\n for (const diff of diffs) {\n if (diff.type === 'create') {\n const entity = await this.findEntityForTable(diff.tableName);\n if (entity) {\n upStatements.push(...this.schemaGenerator.generateCreateTable(entity));\n downStatements.push(this.schemaGenerator.generateDropTable(entity));\n }\n } else if (diff.type === 'alter') {\n const alterStatements = this.schemaGenerator.generateAlterTable(diff);\n upStatements.push(...alterStatements);\n\n const alterDownStatements = this.schemaGenerator.generateAlterTableDown(diff);\n downStatements.push(...alterDownStatements);\n }\n }\n\n if (upStatements.length === 0) {\n this.logger.logInfo('No schema changes detected.');\n return '';\n }\n\n const timestamp = this.getTimestamp();\n const fileName = `${timestamp}_${this.slugify(name)}.ts`;\n const filePath = join(this.migrationsPath, fileName);\n\n const down = [...downStatements].reverse();\n const content = buildSqlQuerierMigrationModule({\n migrationName: name,\n createdAt: new Date(),\n docExtraLines: ['Generated from entity definitions'],\n upInner: emitSqlRunCalls(upStatements),\n downInner: emitSqlRunCalls(down),\n });\n\n await mkdir(this.migrationsPath, { recursive: true });\n await writeFile(filePath, content, 'utf-8');\n\n this.logger.logInfo(`Created migration from entities: ${filePath}`);\n return filePath;\n }\n\n /**\n * Get all schema differences between entities and database\n */\n async getDiffs(): Promise<SchemaDiff[]> {\n await this.ensureSchemaGenerator();\n if (!this.schemaGenerator || !this.schemaIntrospector) {\n throw new Error('Schema generator and introspector must be set');\n }\n\n const ast = await introspectSchema(this.schemaIntrospector);\n const diffs: SchemaDiff[] = [];\n\n for (const entity of this.entities) {\n const meta = getMeta(entity);\n const tableName = this.schemaGenerator.resolveTableName(entity, meta);\n const currentTable = ast.getTable(tableName);\n const diff = this.schemaGenerator.diffSchema(entity, currentTable);\n if (diff) {\n diffs.push(diff);\n }\n }\n\n return diffs;\n }\n\n public async findEntityForTable(tableName: string): Promise<Type<unknown> | undefined> {\n await this.ensureSchemaGenerator();\n if (!this.schemaGenerator) {\n return undefined;\n }\n for (const entity of this.entities) {\n const meta = getMeta(entity);\n const name = this.schemaGenerator.resolveTableName(entity, meta);\n if (name === tableName) {\n return entity;\n }\n }\n return undefined;\n }\n\n /**\n * Sync schema directly (for development only - not for production!)\n */\n async sync(options: { force?: boolean } = {}): Promise<void> {\n if (options.force) {\n return this.syncForce();\n }\n return this.autoSync({ safe: true });\n }\n\n /**\n * Drops and recreates all tables (Development only!)\n */\n public async syncForce(): Promise<void> {\n await this.ensureSchemaGenerator();\n if (!this.schemaGenerator) {\n throw new Error('Schema generator not set. Call setSchemaGenerator() first.');\n }\n\n const querier = await acquireQuerierForMigrations(this.pool);\n\n if (!isSqlQuerier(querier)) {\n await querier.release();\n throw new Error('Migrator requires a SQL-based querier');\n }\n\n try {\n await querier.beginTransaction();\n\n // Drop all tables first (in reverse order for foreign keys)\n for (const entity of [...this.entities].reverse()) {\n const dropSql = this.schemaGenerator.generateDropTable(entity);\n this.logger.logSchema(`Executing: ${dropSql}`);\n await querier.run(dropSql);\n }\n\n // Create all tables\n for (const entity of this.entities) {\n const createStmts = this.schemaGenerator.generateCreateTable(entity);\n for (const createSql of createStmts) {\n this.logger.logSchema(`Executing: ${createSql}`);\n await querier.run(createSql);\n }\n }\n\n await querier.commitTransaction();\n this.logger.logSchema('Schema sync (force) completed');\n } catch (error) {\n await querier.rollbackTransaction();\n throw error;\n } finally {\n await querier.release();\n }\n }\n\n /**\n * Safely synchronizes the schema by only adding missing tables and columns.\n */\n async autoSync(options: { safe?: boolean; drop?: boolean; logging?: boolean } = {}): Promise<void> {\n await this.ensureSchemaGenerator();\n if (!this.schemaGenerator || !this.schemaIntrospector) {\n throw new Error('Schema generator and introspector must be set');\n }\n\n const diffs = await this.getDiffs();\n const statements: string[] = [];\n\n for (const diff of diffs) {\n if (diff.type === 'create') {\n const entity = await this.findEntityForTable(diff.tableName);\n if (entity) {\n statements.push(...this.schemaGenerator.generateCreateTable(entity));\n }\n } else if (diff.type === 'alter') {\n const filteredDiff = this.filterDiff(diff, options);\n const alterStatements = this.schemaGenerator.generateAlterTable(filteredDiff);\n statements.push(...alterStatements);\n }\n }\n\n if (statements.length === 0) {\n if (options.logging) this.logger.logSchema('Schema is already in sync.');\n return;\n }\n\n await this.executeSyncStatements(statements, options);\n }\n\n protected filterDiff(diff: SchemaDiff, options: { safe?: boolean; drop?: boolean }): SchemaDiff {\n const filteredDiff = { ...diff } as { -readonly [K in keyof SchemaDiff]: SchemaDiff[K] };\n if (options.safe !== false) {\n // In safe mode, we only allow additions (creating tables/columns)\n // We block drops and alterations to prevent accidental data loss\n\n if (filteredDiff.columnsToDrop?.length) {\n this.logger.logSkippedMigration(\n `[AutoSync] Skipped dropping ${filteredDiff.columnsToDrop.length} columns in table '${diff.tableName}': ${filteredDiff.columnsToDrop.join(', ')} (safe mode active)`,\n );\n delete filteredDiff.columnsToDrop;\n }\n\n if (filteredDiff.columnsToAlter?.length) {\n this.logger.logSkippedMigration(\n `[AutoSync] Skipped altering ${filteredDiff.columnsToAlter.length} columns in table '${diff.tableName}': ${filteredDiff.columnsToAlter.map((c) => c.to.name).join(', ')} (safe mode active). Use a migration or { safe: false } to apply.`,\n );\n delete filteredDiff.columnsToAlter;\n }\n\n delete filteredDiff.indexesToDrop;\n delete filteredDiff.foreignKeysToDrop;\n }\n\n if (!options.drop && filteredDiff.columnsToDrop?.length) {\n this.logger.logSkippedMigration(\n `[AutoSync] Skipped dropping ${filteredDiff.columnsToDrop.length} columns in table '${diff.tableName}' (drop: false). Use { drop: true } to apply.`,\n );\n delete filteredDiff.columnsToDrop;\n }\n\n return filteredDiff;\n }\n\n public async executeSyncStatements(statements: string[], options: { logging?: boolean }): Promise<void> {\n const querier = await acquireQuerierForMigrations(this.pool);\n try {\n if (this.dialectName === 'mongodb') {\n await this.executeMongoSyncStatements(statements, options, querier as MongoQuerier);\n } else {\n await this.executeSqlSyncStatements(statements, options, querier);\n }\n if (options.logging) this.logger.logSchema('Schema synchronization completed');\n } catch (error) {\n if (this.dialectName !== 'mongodb' && isSqlQuerier(querier)) {\n await querier.rollbackTransaction();\n }\n throw error;\n } finally {\n await querier.release();\n }\n }\n\n public async executeMongoSyncStatements(\n statements: string[],\n options: { logging?: boolean },\n querier: MongoQuerier,\n ): Promise<void> {\n const db = querier.db;\n for (const stmt of statements) {\n const cmd = JSON.parse(stmt) as {\n action: string;\n name?: string;\n collection?: string;\n indexes?: { name: string; columns: string[]; unique?: boolean }[];\n key?: Record<string, number>;\n options?: { unique?: boolean; name?: string };\n };\n if (options.logging) this.logger.logSchema(`Executing MongoDB: ${stmt}`);\n\n const collectionName = cmd.name || cmd.collection;\n if (!collectionName) {\n throw new Error(`MongoDB command missing collection name: ${stmt}`);\n }\n const collection = db.collection(collectionName);\n\n if (cmd.action === 'createCollection') {\n await db.createCollection(cmd.name!);\n if (cmd.indexes?.length) {\n for (const idx of cmd.indexes) {\n const key = Object.fromEntries(idx.columns.map((c: string) => [c, 1]));\n await collection.createIndex(key, { unique: idx.unique, name: idx.name });\n }\n }\n } else if (cmd.action === 'dropCollection') {\n await collection.drop();\n } else if (cmd.action === 'createIndex') {\n await collection.createIndex(cmd.key!, cmd.options);\n } else if (cmd.action === 'dropIndex') {\n await collection.dropIndex(cmd.name!);\n }\n }\n }\n\n public async executeSqlSyncStatements(\n statements: string[],\n options: { logging?: boolean },\n querier: Querier,\n ): Promise<void> {\n if (!isSqlQuerier(querier)) {\n throw new Error('Migrator requires a SQL-based querier for this dialect');\n }\n await querier.beginTransaction();\n for (const sql of statements) {\n if (options.logging) this.logger.logSchema(`Executing: ${sql}`);\n await querier.run(sql);\n }\n await querier.commitTransaction();\n }\n\n /**\n * Get migration status\n */\n async status(): Promise<{ pending: string[]; executed: string[] }> {\n const [pending, executed] = await Promise.all([this.pending().then((m) => m.map((x) => x.name)), this.executed()]);\n\n return { pending, executed };\n }\n\n /**\n * Get migration files from the migrations directory\n */\n public async getMigrationFiles(): Promise<string[]> {\n try {\n const files = await readdir(this.migrationsPath);\n return files\n .filter((f) => /\\.(ts|js|mjs)$/.test(f))\n .filter((f) => !f.endsWith('.d.ts'))\n .sort();\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n return [];\n }\n throw error;\n }\n }\n\n /**\n * Load a migration from a file\n */\n public async loadMigration(fileName: string): Promise<Migration | undefined> {\n const filePath = join(this.migrationsPath, fileName);\n const fileUrl = pathToFileURL(filePath).href;\n\n try {\n const module = await import(fileUrl);\n const migration = module.default ?? module;\n\n if (this.isMigration(migration)) {\n return {\n name: this.getMigrationName(fileName),\n up: migration.up.bind(migration),\n down: migration.down.bind(migration),\n };\n }\n\n this.logger.logWarn(`Warning: ${fileName} is not a valid migration`);\n return undefined;\n } catch (error) {\n this.logger.logError(`Error loading migration ${fileName}: ${(error as Error).message}`, error);\n return undefined;\n }\n }\n\n /**\n * Check if an object is a valid migration\n */\n public isMigration(obj: unknown): obj is MigrationDefinition {\n return (\n typeof obj === 'object' &&\n obj !== undefined &&\n obj !== null &&\n typeof (obj as MigrationDefinition).up === 'function' &&\n typeof (obj as MigrationDefinition).down === 'function'\n );\n }\n\n /**\n * Extract migration name from filename\n */\n public getMigrationName(fileName: string): string {\n return basename(fileName, extname(fileName));\n }\n\n /**\n * Generate timestamp string for migration names\n */\n protected getTimestamp(): string {\n const now = new Date();\n return [\n now.getFullYear(),\n String(now.getMonth() + 1).padStart(2, '0'),\n String(now.getDate()).padStart(2, '0'),\n String(now.getHours()).padStart(2, '0'),\n String(now.getMinutes()).padStart(2, '0'),\n String(now.getSeconds()).padStart(2, '0'),\n ].join('');\n }\n\n /**\n * Convert a string to a slug for filenames\n */\n protected slugify(text: string): string {\n return text\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '_')\n .replace(/^_+|_+$/g, '');\n }\n}\n\n/**\n * Helper function to define a migration with proper typing\n */\nexport function defineMigration(migration: MigrationDefinition): MigrationDefinition {\n return migration;\n}\n\n/**\n * Migration definition that uses the type-safe builder API.\n */\nexport interface BuilderMigrationDefinition {\n readonly name?: string;\n readonly up: (builder: IMigrationBuilder) => Promise<void>;\n readonly down: (builder: IMigrationBuilder) => Promise<void>;\n}\n\n/**\n * Define a migration using the type-safe builder API.\n *\n * @example\n * ```ts\n * export default defineBuilderMigration({\n * async up(m) {\n * await m.createTable('users', (table) => {\n * table.id();\n * table.string('email', 255).unique();\n * table.timestamps();\n * });\n * },\n * async down(m) {\n * await m.dropTable('users');\n * }\n * });\n * ```\n */\nexport function defineBuilderMigration(migration: BuilderMigrationDefinition): BuilderMigrationDefinition {\n return migration;\n}\n","import * as fs from 'node:fs/promises';\nimport type { MigrationStorage, SqlQuerier } from '../../type/index.js';\n\n/**\n * Stores migration state in a JSON file.\n * Useful for development or environments without a database.\n */\nexport class JsonMigrationStorage implements MigrationStorage {\n private executedMigrations: string[] = [];\n private readonly filePath: string;\n\n constructor(filePath = './migrations/.uql-migrations.json') {\n this.filePath = filePath;\n }\n\n async ensureStorage(): Promise<void> {\n const content = await fs.readFile(this.filePath, 'utf-8').catch(async (error) => {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n const initial = '[]';\n await fs.writeFile(this.filePath, initial, 'utf-8');\n return initial;\n }\n throw error;\n });\n this.executedMigrations = JSON.parse(content);\n }\n\n async executed(): Promise<string[]> {\n await this.ensureStorage();\n return this.executedMigrations;\n }\n\n async logWithQuerier(_querier: SqlQuerier, migrationName: string): Promise<void> {\n await this.ensureStorage();\n if (!this.executedMigrations.includes(migrationName)) {\n this.executedMigrations.push(migrationName);\n await this.save();\n }\n }\n\n async unlogWithQuerier(_querier: SqlQuerier, migrationName: string): Promise<void> {\n await this.ensureStorage();\n this.executedMigrations = this.executedMigrations.filter((m) => m !== migrationName);\n await this.save();\n }\n\n private async save(): Promise<void> {\n await fs.writeFile(this.filePath, JSON.stringify(this.executedMigrations, null, 2), 'utf-8');\n }\n}\n","/**\n * Schema Sync\n *\n * Orchestrates schema synchronization between entities and database\n * with configurable direction modes.\n */\n\nimport type { SchemaAST } from '../../schema/schemaAST.js';\nimport { SchemaASTBuilder } from '../../schema/schemaASTBuilder.js';\nimport { SchemaASTDiffer } from '../../schema/schemaASTDiffer.js';\nimport type { SchemaDiffResult, SyncDirection, SyncOptions } from '../../schema/types.js';\nimport type { SchemaIntrospector, Type } from '../../type/index.js';\n\n/**\n * Result of a schema sync operation.\n */\nexport interface SchemaSyncResult {\n /** Direction of the sync */\n direction: SyncDirection;\n /** Whether the sync was successful */\n success: boolean;\n /** Changes applied to database */\n dbChanges: SchemaDiffResult | undefined;\n /** Changes applied to entities */\n entityChanges: SchemaDiffResult | undefined;\n /** Conflicts that need manual resolution */\n conflicts: SyncConflict[];\n /** Human-readable summary */\n summary: string;\n /** Structured summary of changes */\n details: {\n db: { created: number; dropped: number; altered: number };\n entity: { created: number; dropped: number; altered: number };\n };\n}\n\n/**\n * A conflict between entity and database schemas.\n */\nexport interface SyncConflict {\n /** Type of conflict */\n type: 'type_mismatch' | 'constraint_mismatch' | 'column_mismatch' | 'relation_mismatch';\n /** Table name */\n table: string;\n /** Column name (if applicable) */\n column?: string;\n /** What entity expects */\n entityValue: unknown;\n /** What database has */\n dbValue: unknown;\n /** Suggested resolution */\n suggestion: string;\n}\n\n/**\n * Options for schema sync operation.\n */\nexport interface SchemaSyncOptions extends SyncOptions {\n /** Entities to sync */\n entities: Type<unknown>[];\n /** Schema introspector for database */\n introspector: SchemaIntrospector;\n /** Output directory for generated entities (db-to-entity mode) */\n entityOutputDir?: string;\n /** Dry run - don't apply changes */\n dryRun?: boolean;\n}\n\n/**\n * Service for synchronizing schemas between entities and database.\n */\nexport class SchemaSync {\n constructor(private readonly options: SchemaSyncOptions) {}\n\n /**\n * Execute schema synchronization.\n */\n async sync(): Promise<SchemaSyncResult> {\n const direction = this.options.direction ?? 'bidirectional';\n\n switch (direction) {\n case 'entity-to-db':\n return this.syncEntityToDb();\n case 'db-to-entity':\n return this.syncDbToEntity();\n case 'bidirectional':\n return this.syncBidirectional();\n }\n }\n\n /**\n * Sync from entities to database (push).\n */\n private async syncEntityToDb(): Promise<SchemaSyncResult> {\n const entityAST = this.buildEntityAST();\n const dbAST = await this.buildDatabaseAST();\n\n const differ = new SchemaASTDiffer();\n const diff = differ.diff(entityAST, dbAST);\n\n // In safe mode, filter out destructive changes\n const safeDiff = this.options.safe ? this.filterDestructiveChanges(diff) : diff;\n\n return {\n direction: 'entity-to-db',\n success: true,\n dbChanges: safeDiff,\n entityChanges: undefined,\n conflicts: [],\n summary: this.formatSummary('entity-to-db', safeDiff),\n details: {\n db: this.getDiffCounts(safeDiff),\n entity: { created: 0, dropped: 0, altered: 0 },\n },\n };\n }\n\n /**\n * Sync from database to entities (pull).\n */\n private async syncDbToEntity(): Promise<SchemaSyncResult> {\n const entityAST = this.buildEntityAST();\n const dbAST = await this.buildDatabaseAST();\n\n const differ = new SchemaASTDiffer();\n // Diff in opposite direction: DB is source, entity is target\n const diff = differ.diff(dbAST, entityAST);\n\n // Apply safe mode if enabled\n const safeDiff = this.options.safe ? this.filterDestructiveChanges(diff) : diff;\n\n return {\n direction: 'db-to-entity',\n success: true,\n dbChanges: undefined,\n entityChanges: safeDiff,\n conflicts: [],\n summary: this.formatSummary('db-to-entity', safeDiff),\n details: {\n db: { created: 0, dropped: 0, altered: 0 },\n entity: this.getDiffCounts(safeDiff),\n },\n };\n }\n\n /**\n * Bidirectional sync with conflict detection.\n */\n private async syncBidirectional(): Promise<SchemaSyncResult> {\n const entityAST = this.buildEntityAST();\n const dbAST = await this.buildDatabaseAST();\n\n const differ = new SchemaASTDiffer();\n\n // Get both directions\n const entityToDb = differ.diff(entityAST, dbAST);\n const dbToEntity = differ.diff(dbAST, entityAST);\n\n // Detect conflicts (changes in both directions for same elements)\n const conflicts = this.detectConflicts(entityToDb, dbToEntity);\n\n // Filter out conflicting changes\n let safeEntityToDb = this.filterConflictingChanges(entityToDb, conflicts);\n let safeDbToEntity = this.filterConflictingChanges(dbToEntity, conflicts);\n\n // Apply safe mode if enabled\n if (this.options.safe) {\n safeEntityToDb = this.filterDestructiveChanges(safeEntityToDb);\n safeDbToEntity = this.filterDestructiveChanges(safeDbToEntity);\n }\n\n return {\n direction: 'bidirectional',\n success: conflicts.length === 0,\n dbChanges: safeEntityToDb,\n entityChanges: safeDbToEntity,\n conflicts,\n summary: this.formatBidirectionalSummary(safeEntityToDb, safeDbToEntity, conflicts),\n details: {\n db: this.getDiffCounts(safeEntityToDb),\n entity: this.getDiffCounts(safeDbToEntity),\n },\n };\n }\n\n /**\n * Build SchemaAST from entities.\n */\n private buildEntityAST(): SchemaAST {\n const builder = new SchemaASTBuilder();\n return builder.fromEntities(this.options.entities);\n }\n\n /**\n * Build SchemaAST from database.\n */\n private async buildDatabaseAST(): Promise<SchemaAST> {\n return this.options.introspector.introspect();\n }\n\n /**\n * Filter destructive changes for safe mode.\n */\n private filterDestructiveChanges(diff: SchemaDiffResult): SchemaDiffResult {\n return {\n ...diff,\n tablesToDrop: [], // Never drop tables in safe mode\n columnDiffs: diff.columnDiffs.filter((d) => d.type !== 'drop'), // Never drop columns\n indexDiffs: diff.indexDiffs.filter((d) => d.type !== 'drop'),\n relationshipDiffs: diff.relationshipDiffs.filter((d) => d.type !== 'drop'),\n };\n }\n\n /**\n * Detect conflicts between bidirectional changes.\n */\n private detectConflicts(entityToDb: SchemaDiffResult, dbToEntity: SchemaDiffResult): SyncConflict[] {\n const conflicts: SyncConflict[] = [];\n\n // Find column alterations that exist in both directions (type conflicts)\n const entityColAlters = new Map(\n entityToDb.columnDiffs.filter((d) => d.type === 'alter').map((d) => [`${d.table}.${d.column}`, d]),\n );\n\n for (const dbColDiff of dbToEntity.columnDiffs.filter((d) => d.type === 'alter')) {\n const key = `${dbColDiff.table}.${dbColDiff.column}`;\n const entityColDiff = entityColAlters.get(key);\n\n if (entityColDiff) {\n // Both sides want to alter the same column - conflict\n conflicts.push({\n type: 'type_mismatch',\n table: dbColDiff.table,\n column: dbColDiff.column,\n entityValue: entityColDiff.expected?.type,\n dbValue: dbColDiff.expected?.type,\n suggestion: `Column has different types. Entity: ${this.formatType(entityColDiff.expected?.type)}, DB: ${this.formatType(dbColDiff.expected?.type)}`,\n });\n }\n }\n\n return conflicts;\n }\n\n /**\n * Filter out conflicting changes.\n */\n private filterConflictingChanges(diff: SchemaDiffResult, conflicts: SyncConflict[]): SchemaDiffResult {\n const conflictKeys = new Set(conflicts.map((c) => `${c.table}.${c.column ?? ''}`));\n\n return {\n ...diff,\n columnDiffs: diff.columnDiffs.filter((d) => !conflictKeys.has(`${d.table}.${d.column}`)),\n tablesToAlter: diff.tablesToAlter.filter((t) => !conflictKeys.has(`${t.name}.`)),\n };\n }\n\n /**\n * Get counts of changes from a diff.\n */\n private getDiffCounts(diff: SchemaDiffResult): { created: number; dropped: number; altered: number } {\n return {\n created: diff.tablesToCreate.length + diff.columnDiffs.filter((d) => d.type === 'add').length,\n dropped: diff.tablesToDrop.length + diff.columnDiffs.filter((d) => d.type === 'drop').length,\n altered: diff.columnDiffs.filter((d) => d.type === 'alter').length,\n };\n }\n\n /**\n * Format summary for single-direction sync.\n */\n private formatSummary(direction: SyncDirection, diff: SchemaDiffResult): string {\n const lines: string[] = [];\n\n if (direction === 'entity-to-db') {\n lines.push('Entity → Database Changes:');\n } else {\n lines.push('Database → Entity Changes:');\n }\n\n if (diff.tablesToCreate.length > 0) {\n lines.push(` + ${diff.tablesToCreate.length} table(s) to create`);\n }\n if (diff.tablesToDrop.length > 0) {\n lines.push(` - ${diff.tablesToDrop.length} table(s) to drop`);\n }\n if (diff.columnDiffs.length > 0) {\n const adds = diff.columnDiffs.filter((d) => d.type === 'add').length;\n const drops = diff.columnDiffs.filter((d) => d.type === 'drop').length;\n const alters = diff.columnDiffs.filter((d) => d.type === 'alter').length;\n if (adds) lines.push(` + ${adds} column(s) to add`);\n if (drops) lines.push(` - ${drops} column(s) to drop`);\n if (alters) lines.push(` ~ ${alters} column(s) to alter`);\n }\n if (diff.indexDiffs.length > 0) {\n lines.push(` ${diff.indexDiffs.length} index change(s)`);\n }\n\n if (!diff.hasDifferences) {\n lines.push(' Schema is already in sync.');\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Format summary for bidirectional sync.\n */\n private formatBidirectionalSummary(\n entityToDb: SchemaDiffResult,\n dbToEntity: SchemaDiffResult,\n conflicts: SyncConflict[],\n ): string {\n const lines: string[] = [];\n\n lines.push('Bidirectional Sync Report');\n lines.push('========================\\n');\n\n if (conflicts.length > 0) {\n lines.push(`⚠️ ${conflicts.length} conflict(s) require manual resolution:\\n`);\n for (const conflict of conflicts) {\n lines.push(` • ${conflict.table}.${conflict.column ?? ''}: ${conflict.suggestion}`);\n }\n lines.push('');\n }\n\n if (entityToDb.hasDifferences) {\n lines.push('Entity → Database:');\n lines.push(this.formatSummary('entity-to-db', entityToDb).split('\\n').slice(1).join('\\n'));\n lines.push('');\n }\n\n if (dbToEntity.hasDifferences) {\n lines.push('Database → Entity:');\n lines.push(this.formatSummary('db-to-entity', dbToEntity).split('\\n').slice(1).join('\\n'));\n }\n\n if (!entityToDb.hasDifferences && !dbToEntity.hasDifferences && conflicts.length === 0) {\n lines.push('✓ Schema is in sync.');\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Format type for display.\n */\n private formatType(type?: { category?: string; length?: number }): string {\n if (!type?.category) return 'unknown';\n return type.length ? `${type.category}(${type.length})` : type.category;\n }\n}\n\n/**\n * Create a SchemaSync instance.\n */\nexport function createSchemaSync(options: SchemaSyncOptions): SchemaSync {\n return new SchemaSync(options);\n}\n"],"names":["acquireQuerierForMigrations","pool","getMigrationQuerier","getQuerier","assertCliConfig","config","TypeError","c","p","key","undefined","dialect","dialectName","ColumnBuilder","name","type","options","_name","_type","_nullable","nullable","_unique","unique","_primaryKey","primaryKey","_autoIncrement","autoIncrement","_defaultValue","defaultValue","_index","index","_comment","comment","unsigned","references","_foreignKey","table","columns","column","onDelete","onUpdate","value","notNullable","text","action","build","foreignKey","SqlExpression","sql","toString","isExpression","t","now","currentDate","currentTime","null","true","false","uuid","mysqlUuid","raw","literal","escaped","replace","number","String","emptyObject","emptyArray","onUpdateNow","formatDefaultValue","Date","toISOString","json","JSON","stringify","isVectorCategory","category","SQL_TO_CANONICAL","int","int4","integer","tinyint","size","smallint","int2","mediumint","bigint","int8","serial","bigserial","smallserial","float","float4","real","float8","double","decimal","numeric","money","char","character","varchar","tinytext","mediumtext","longtext","bool","boolean","bit","date","time","withTimezone","timetz","timestamp","timestamptz","datetime","jsonb","blob","bytea","binary","varbinary","tinyblob","mediumblob","longblob","vector","halfvec","sparsevec","PG_TYPE_MAP","string","CANONICAL_TO_SQL","postgres","cockroachdb","mysql","sqlite","mariadb","mongodb","PG_SIZE_MODIFIERS","tiny","small","medium","big","SIZE_MODIFIERS","CANONICAL_TO_TS","sqlToCanonical","sqlType","normalized","toLowerCase","trim","hasUnsigned","includes","withoutUnsigned","match","baseType","params","base","result","paramParts","split","map","length","Number","parseInt","isNaN","precision","scale","dimensions","canonicalToSql","getBaseSqlType","formatStringSqlType","formatDecimalSqlType","features","vectorSupportsLength","supportsTimestamptz","sizeMap","defaultStringAsText","s","canonicalToTypeScript","fieldOptionsToCanonical","tsType","columnType","isId","Boolean","BigInt","canonical","areTypesEqual","a","b","lengthA","lengthB","pA","pB","sA","sB","isBreakingTypeChange","from","to","sizeOrder","fromIndex","indexOf","toIndex","canonicalToColumnType","DEFAULT_LOG_LEVELS","DefaultLogger","logQuery","query","values","duration","console","log","logSlowQuery","logParams","warn","logWarn","message","logError","error","logInfo","info","logSchema","logMigration","logSkippedMigration","LoggerWrapper","slowQuery","levels","Set","logger","Array","isArray","loggerFunction","threshold","has","level","method","charAt","toUpperCase","slice","args","logFn","holder","globalThis","metaKey","Symbol","for","metas","Map","ensureMeta","entity","meta","get","id","fields","relations","set","getMeta","processed","fillRelations","relKey","relOpts","mappedBy","fillInverseSideRelations","relEntity","relMeta","cardinality","idKey","relIdKey","idName","relIdName","source","lowerFirst","upperFirst","target","local","foreign","through","fillThroughRelations","getMappedByRelationKey","mappedByRelation","reverse","getKeys","reduce","field","keyMap","getRelationKeyMap","keys","acc","SchemaAST","getTable","tables","addTable","schema","removeTable","i","relationships","rel","splice","indexes","delete","getTables","getTableNames","getDependentTables","incomingRelations","r","getDependencies","outgoingRelations","getRelationship","find","getTableRelationships","filter","getReferencedColumn","fkColumn","detectCircularDependencies","cycles","visited","stack","dfs","path","cycleStart","push","add","dep","hasCircularDependencies","getCreateOrder","topologicalSort","getDropOrder","visit","validate","errors","relationship","cycle","join","indexNames","isValid","isJunctionTable","fkCount","columnCount","relatedTables","tableName","containsBothNames","every","inferRelationType","fromCol","isUnique","getInverseRelationType","addIndex","getTableIndexes","getIndex","addRelationship","col","referencedBy","removeRelationship","findIndex","fromIdx","toIdx","refIdx","clone","clonedColumns","colName","clonedCol","clonedTable","pk","fromTable","toTable","fromColumns","toColumns","clonedRel","idx","clonedIdx","getStats","tableCount","relationshipCount","indexCount","toJSON","isPrimaryKey","isAutoIncrement","DEFAULT_FOREIGN_KEY_ACTION","SchemaASTBuilder","defaultForeignKeyAction","namingStrategy","ast","reset","getAST","fromEntities","entities","resolveTableName","e","m","resolveColumnName","k","f","columnName","addTableFromEntity","addRelationshipsFromEntity","addIndexesFromEntity","Object","virtual","relation","relatedEntity","relatedMeta","relatedTableName","relatedTable","localPropName","foreignPropName","localField","localColName","foreignField","foreignColName","localColumn","foreignColumn","relNode","confidence","inferredFrom","indexFields","indexName","indexNode","syncStatus","idxMeta","propName","where","distance","efConstruction","lists","INLINE_VECTOR_DISTANCE_MAP","cosine","l2","SqlSchemaGenerator","escapeId","identifier","escapeSqlId","quoteChar","serialPrimaryKeyType","serialPrimaryKey","getCanonicalType","fieldType","canonicalTypeToSql","generateCreateTable","builder","tableNode","generateCreateTableFromNode","generateDropTable","generateAlterTable","diff","statements","columnsToAdd","colDef","generateColumnDefinitionFromSchema","columnsToAlter","colStatements","generateAlterColumnStatements","columnsToDrop","indexesToAdd","generateCreateIndex","indexesToDrop","generateDropIndex","generateAlterTableDown","includePrimaryKey","ifNotExists","indexIfNotExists","opsClassMap","vectorOpsClass","hasOpsClass","opsClass","using","withClause","withParams","dropIndexSyntax","includeUnique","definition","generateColumnComment","getSqlType","refEntity","refMeta","refIdField","getBooleanType","newDefinition","alterColumnSyntax","Error","alterColumnStrategy","getTableOptions","_meta","tableOptions","columnComment","escapedComment","booleanLiteral","diffSchema","currentTable","currentColumns","fieldKeys","currentColumn","fieldToColumnSchema","desiredColumn","currentColumnSchema","columnNodeToSchema","columnsNeedAlteration","fieldKey","current","desired","isTypeEqual","isDefaultValueEqual","typeA","typeB","normalize","val","constraints","generateColumnFromNode","pkCols","fromCols","toCols","constraintName","createSql","isInlineVectorIdx","vectorIndexStyle","vectorIndexes","regularIndexes","generateInlineVectorIndex","vectorExtension","hasVectorCol","some","generateCreateIndexFromNode","def","clause","metric","generateDropTableFromNode","ifExists","generateCreateTableFromDefinition","tableDefinitionToNode","generateDropTableSql","cascade","dropTableCascade","generateRenameTableSql","oldName","newName","renameTableSyntax","generateAddColumnSql","colSql","fullColumnDefinitionToNode","generateAlterColumnSql","generateDropColumnSql","generateRenameColumnSql","generateCreateIndexSql","generateDropIndexSql","generateAddForeignKeySql","fkCols","refCols","referencesColumns","foreignKeyAlter","referencesTable","generateDropForeignKeySql","dropForeignKeySyntax","pkNodes","node","finalPrimaryKey","idxDef","fkDef","foreignKeys","createSchemaGenerator","AbstractSqlDialect","splitSqlStatements","lastIndex","masterRegex","matchAll","stmt","substring","lastStmt","splitSqlStatementsOnSemicolons","TableForeignKeyBuilder","_parent","_referencesColumns","_onDelete","_onUpdate","_columns","_referencesTable","TableBuilder","_columnBuilders","_indexes","_foreignKeyBuilders","rest","createdAt","updatedAt","timestamps","fk","cb","AlterTableBuilder","parentBuilder","addColumn","callback","recordOperationSync","dropColumn","renameColumn","alterColumn","changes","dropIndex","addForeignKey","dropForeignKey","OperationRecorder","createTable","dropTable","renameTable","alterTable","createIndex","getOperations","operations","operation","MigrationBuilder","querier","generator","sqlGenerator","execute","run","getCreateTableStatements","statement","operationToSql","createDryRunBuilder","loadConfig","customPath","jiti","createJiti","process","cwd","fullPath","resolve","exists","stat","then","catch","import","default","configPaths","configPath","pascalCase","str","word","camelCase","pascal","singularize","endsWith","EntityCodeGenerator","uqlImportPath","addSyncComments","classNameTransformer","defaultClassNameTransformer","bind","propertyNameTransformer","defaultPropertyNameTransformer","includeRelations","includeIndexes","defaultSingularize","generateAll","generateEntity","generateForTable","className","fileName","imports","buildImports","decorators","buildEntityDecorators","buildFields","buildRelations","code","uqlImports","relatedImports","getRelationDecoratorName","relatedClassName","compositeIndexes","sort","lines","propNames","optStr","fieldCode","buildField","propertyName","formatTypeDescription","idOptions","buildIdOptions","fieldOptions","buildFieldOptions","singleColIndex","relCode","buildOutgoingRelation","buildIncomingRelation","firstCol","baseName","decoratorName","toFixed","inverseType","inverseProp","desc","singular","toPascalCase","toCamelCase","createEntityCodeGenerator","EntityMerger","markRemovedAsDeprecated","merge","existingCode","fieldsToAdd","fieldsToDeprecate","fieldsAdded","fieldsDeprecated","existingProps","extractPropertyNames","newFields","insertPosition","findInsertPosition","modified","newFieldsCode","generateFieldsCode","deprecatedCode","markFieldAsDeprecated","props","regex","exec","braceCount","inClass","lastPropertyLine","line","countBraces","test","insertLineIndex","pos","j","count","isRelation","generateRelationField","generateColumnField","isOutgoing","typeStr","propRegex","RegExp","beforeMatch","Math","max","indent","deprecationComment","reason","inverse","createEntityMerger","MigrationCodeGenerator","includeComments","generate","description","generateDescription","up","down","generateAlterUp","generateAlterDown","diffs","ups","downs","descriptions","generateFile","migrationName","indentBlock","generateColumnCall","generateIndexCall","generateAddColumn","generateAlterColumn","idxName","foreignKeysToAdd","generateAddForeignKey","fkName","foreignKeysToDrop","generateColumnOptions","cols","opts","optsStr","referencedColumns","referencedTable","getColumnMethod","generateColumnOptionsObject","typeMap","lowerType","formatValue","parts","prefix","repeat","createMigrationCodeGenerator","emitSqlRunCall","emitSqlRunCalls","EMPTY_MANUAL_MIGRATION_UP_INNER","EMPTY_MANUAL_MIGRATION_DOWN_INNER","buildSqlQuerierMigrationModule","iso","extra","docExtraLines","upInner","downInner","SmartRelationDetector","minConfidence","detectAll","junctionRelations","detectJunctionTables","oneToOneUpgrades","detectOneToOneRelations","outgoingRels","rel1","rel2","existingRelations","upgrades","createRelationDetector","DEFAULT_OPTIONS","compareIndexes","compareRelationships","ignoreCase","excludeTables","SchemaASTDiffer","normalizeName","n","tablesToCreate","tablesToDrop","tablesToAlter","columnDiffs","indexDiffs","relationshipDiffs","sourceTableMap","targetTableMap","sourceTable","targetTable","tableDiff","diffTable","relDiffs","diffRelationships","hasDifferences","hasBreakingChanges","d","isBreaking","diffTableColumns","diffTableIndexes","sourceColMap","targetColMap","sourceCol","expected","targetCol","actual","colDiff","diffColumn","sourceIndexMap","targetIndexMap","sourceIdx","normalizedName","targetIdx","idxDiff","diffIndex","differences","formatType","normalizeDefault","sourceColNames","targetColNames","sourceRelMap","targetRelMap","getRelationshipKey","sourceRel","targetRel","relDiff","diffRelationship","sDelete","tDelete","sUpdate","tUpdate","upper","DriftDetector","expectedAST","actualAST","checkTypes","checkNullable","checkIndexes","checkForeignKeys","checkDefaults","detect","differ","drifts","detectTableDrifts","detectColumnDrifts","detectIndexDrifts","detectRelationshipDrifts","status","calculateStatus","summary","createSummary","generatedAt","severity","details","suggestion","addAlterColumnDrifts","expectedType","actualType","hasCritical","critical","warning","createDriftDetector","detectDrift","detector","BaseSqlIntrospector","introspect","tableNames","tableSchemas","getTableSchema","buildAST","tableNodes","buildTables","buildRelationships","buildIndexes","columnSchemaToCanonical","AbstractSqlSchemaIntrospector","tableExistsInternal","Promise","all","getColumns","getIndexes","getForeignKeys","getPrimaryKey","release","results","getTableNamesQuery","row","mapTableNameRow","tableExists","isSqlQuerier","tableExistsQuery","tableExistsParams","parseTableExistsResult","getColumnsQuery","getColumnsParams","mapColumnsResult","getIndexesQuery","getIndexesParams","mapIndexesResult","getForeignKeysQuery","getForeignKeysParams","mapForeignKeysResult","getPrimaryKeyQuery","getPrimaryKeyParams","mapPrimaryKeyResult","normalizeReferentialAction","toNumber","MongoSchemaIntrospector","indexColumns","db","collections","listCollections","toArray","collection","names","MysqlSchemaIntrospector","_tableName","table_name","_querier","column_name","column_type","is_nullable","parseDefaultValue","column_default","column_key","character_maximum_length","numeric_precision","numeric_scale","column_comment","index_name","is_unique","constraint_name","referenced_table","referenced_columns","delete_rule","update_rule","parseFloat","startsWith","MariadbSchemaIntrospector","PostgresSchemaIntrospector","normalizeType","data_type","udt_name","is_primary_key","is_identity","dataType","udtName","cleaned","columnDefault","isIdentity","SqliteSchemaIntrospector","uniqueColumns","getUniqueColumns","notnull","dflt_value","extractLength","indexSchemas","isUserCreated","origin","isCompositeUnique","grouped","existing","entries","rows","first","on_delete","on_update","pkColumns","indexInfo","introspectSchema","introspector","createSchemaGeneratorAsync","MongoSchemaGenerator","DatabaseMigrationStorage","storageInitialized","ensureStorage","createTableIfNotExists","executed","logWithQuerier","placeholder","unlogWithQuerier","Migrator","_logger","_entities","getEntities","_namingStrategy","storage","migrationsPath","schemaIntrospector","createIntrospector","schemaGenerator","createGenerator","ensureSchemaGenerator","_mongoSchemaLoadPromise","gen","setSchemaGenerator","isKnownMigratorDialect","getMigrations","files","getMigrationFiles","migrations","file","migration","loadMigration","localeCompare","pending","executedSet","pendingMigrations","migrationsToRun","step","runMigration","success","executedMigrations","direction","startTime","beginTransaction","commitTransaction","rollbackTransaction","getTimestamp","slugify","filePath","content","mkdir","recursive","writeFile","generateFromEntities","getDiffs","upStatements","downStatements","findEntityForTable","alterStatements","alterDownStatements","sync","force","syncForce","autoSync","safe","dropSql","createStmts","filteredDiff","filterDiff","logging","executeSyncStatements","drop","executeMongoSyncStatements","executeSqlSyncStatements","cmd","parse","collectionName","createCollection","fromEntries","x","readdir","fileUrl","pathToFileURL","href","module","isMigration","getMigrationName","obj","basename","extname","getFullYear","getMonth","padStart","getDate","getHours","getMinutes","getSeconds","defineMigration","defineBuilderMigration","JsonMigrationStorage","fs","readFile","initial","save","SchemaSync","syncEntityToDb","syncDbToEntity","syncBidirectional","entityAST","buildEntityAST","dbAST","buildDatabaseAST","safeDiff","filterDestructiveChanges","dbChanges","entityChanges","conflicts","formatSummary","getDiffCounts","created","dropped","altered","entityToDb","dbToEntity","detectConflicts","safeEntityToDb","filterConflictingChanges","safeDbToEntity","formatBidirectionalSummary","entityColAlters","dbColDiff","entityColDiff","entityValue","dbValue","conflictKeys","adds","drops","alters","conflict","createSchemaSync"],"mappings":"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"}
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/browser/http/bus.ts", "../../src/browser/http/http.ts", "../../src/util/object.util.ts", "../../src/util/string.util.ts", "../../src/http/contract.ts", "../../src/http/query.ts", "../../src/browser/querier/httpQuerier.ts", "../../src/browser/options.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import type { RequestCallback, RequestNotification } from '../type/index.js';\n\nconst subscriptors: RequestCallback[] = [];\n\nexport function notify(notification: RequestNotification): void {\n for (const subscriptor of subscriptors) {\n subscriptor(notification);\n }\n}\n\nexport function on(cb: RequestCallback): () => void {\n subscriptors.push(cb);\n const index = subscriptors.length - 1;\n return (): void => {\n subscriptors.splice(index, 1);\n };\n}\n",
|
|
6
|
+
"import type { RequestErrorResponse, RequestSuccessResponse } from '../../http/contract.js';\nimport type { RequestOptions } from '../type/index.js';\nimport { notify } from './bus.js';\n\n/**\n * Error thrown for non-2xx responses. Carries the HTTP status so callers can key\n * behavior on it (401 redirects, 402 payment flows, error-boundary routing).\n */\nexport class RequestError extends Error {\n constructor(\n message: string,\n readonly status: number,\n ) {\n super(message);\n this.name = 'RequestError';\n }\n}\n\nexport function get<T>(url: string, opts?: RequestOptions) {\n return request<T>(url, { method: 'get' }, opts);\n}\n\nexport function post<T>(url: string, payload: unknown, opts?: RequestOptions) {\n const body = JSON.stringify(payload);\n return request<T>(url, { method: 'post', body }, opts);\n}\n\nexport function patch<T>(url: string, payload: unknown, opts?: RequestOptions) {\n const body = JSON.stringify(payload);\n return request<T>(url, { method: 'patch', body }, opts);\n}\n\nexport function put<T>(url: string, payload: unknown, opts?: RequestOptions) {\n const body = JSON.stringify(payload);\n return request<T>(url, { method: 'put', body }, opts);\n}\n\nexport function remove<T>(url: string, opts?: RequestOptions) {\n return request<T>(url, { method: 'delete' }, opts);\n}\n\n/**\n * HTTP QUERY (RFC 10008): a safe, idempotent read whose JSON query travels in the\n * request body, avoiding URL-length limits. Method name must stay uppercase\n * (fetch only normalizes the classic verbs).\n */\nexport function query<T>(url: string, payload: unknown, opts?: RequestOptions) {\n const body = JSON.stringify(payload);\n return request<T>(url, { method: 'QUERY', body }, opts);\n}\n\nfunction request<T>(url: string, init: RequestInit, opts?: RequestOptions) {\n notify({ phase: 'start', opts });\n\n init.headers = {\n accept: 'application/json',\n 'content-type': 'application/json',\n ...opts?.headers,\n };\n if (opts?.signal) {\n init.signal = opts.signal;\n }\n\n return fetch(url, init)\n .then((rawResp) =>\n rawResp.json().then((resp: unknown) => {\n const isSuccess = rawResp.status >= 200 && rawResp.status < 300;\n if (isSuccess) {\n notify({ phase: 'success', opts });\n return resp as RequestSuccessResponse<T>;\n }\n const errorResp = resp as Partial<RequestErrorResponse> | undefined;\n const error = {\n message: errorResp?.error?.message ?? rawResp.statusText,\n code: errorResp?.error?.code ?? rawResp.status,\n };\n notify({ phase: 'error', error, opts });\n throw new RequestError(error.message, error.code);\n }),\n )\n .finally(() => {\n notify({ phase: 'complete', opts });\n });\n}\n",
|
|
7
|
+
"import type { FieldKey, FieldOptions } from '../type/index.js';\n\nexport function throwPendingTransaction(): never {\n throw TypeError('pending transaction');\n}\n\nexport function throwNoPendingTransaction(): never {\n throw TypeError('not a pending transaction');\n}\n\nexport function clone<T>(value: T): T {\n if (typeof value !== 'object' || value === null) {\n return value;\n }\n if (Array.isArray(value)) {\n return value.map((it) => clone(it)) as T;\n }\n return { ...value };\n}\n\nexport function hasKeys(obj: unknown): boolean {\n if (typeof obj !== 'object' || obj === null) return false;\n for (const _ in obj) return true;\n return false;\n}\n\nexport function getKeys<T extends object>(obj: T): (keyof T & string)[] {\n return obj ? (Object.keys(obj) as (keyof T & string)[]) : [];\n}\n\nexport function getFieldKeys<E>(\n fields: {\n [K in FieldKey<E>]?: FieldOptions;\n },\n): FieldKey<E>[] {\n return getKeys(fields).filter((field) => fields[field]!.eager ?? true);\n}\n",
|
|
8
|
+
"export function kebabCase(val: string): string {\n let resp = val.charAt(0).toLowerCase();\n for (let i = 1; i < val.length; ++i) {\n resp += val[i] === val[i].toUpperCase() ? '-' + val[i].toLowerCase() : val[i];\n }\n return resp;\n}\n\nexport function upperFirst(text: string): string {\n if (!text) return text;\n return text[0].toUpperCase() + text.slice(1);\n}\n\nexport function lowerFirst(text: string): string {\n if (!text) return text;\n return text[0].toLowerCase() + text.slice(1);\n}\n\nexport function snakeCase(val: string): string {\n if (val === null || val === undefined) return val as string;\n if (!val) return '';\n let resp = val.charAt(0).toLowerCase();\n for (let i = 1; i < val.length; ++i) {\n const char = val[i];\n const charLower = char.toLowerCase();\n if (char !== charLower && char === char.toUpperCase()) {\n resp += '_' + charLower;\n } else {\n resp += char;\n }\n }\n return resp;\n}\n\n/**\n * Convert a string to PascalCase (UpperCamelCase).\n * @example 'user_profile' -> 'UserProfile'\n * @example 'some-text' -> 'SomeText'\n */\nexport function pascalCase(str: string): string {\n if (!str) return '';\n return str\n .split(/[_\\s-]+/)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join('');\n}\n\n/**\n * Convert a string to camelCase.\n * @example 'user_profile' -> 'userProfile'\n * @example 'SomeText' -> 'someText'\n */\nexport function camelCase(str: string): string {\n const pascal = pascalCase(str);\n return pascal.charAt(0).toLowerCase() + pascal.slice(1);\n}\n\n/**\n * Simple singularize function for English words.\n * @example 'users' -> 'user'\n * @example 'categories' -> 'category'\n */\nexport function singularize(name: string): string {\n if (!name) return '';\n if (name.endsWith('ies')) {\n return name.slice(0, -3) + 'y';\n }\n if (name.endsWith('ses') || name.endsWith('xes') || name.endsWith('zes')) {\n return name.slice(0, -2);\n }\n if (name.endsWith('s') && !name.endsWith('ss')) {\n return name.slice(0, -1);\n }\n return name;\n}\n\n/**\n * Simple pluralize function for English words.\n * @example 'user' -> 'users'\n * @example 'category' -> 'categories'\n */\nexport function pluralize(name: string): string {\n if (!name) return '';\n if (name.endsWith('y') && name.length > 1 && !/[aeiou]/.test(name[name.length - 2])) {\n return name.slice(0, -1) + 'ies';\n }\n if (name.endsWith('s') || name.endsWith('x') || name.endsWith('z') || name.endsWith('ch') || name.endsWith('sh')) {\n return name + 'es';\n }\n return name + 's';\n}\n",
|
|
9
|
+
"import type { Type, UniversalQuerier } from '../type/index.js';\n// import from the specific util modules (not the barrel) to keep entity\n// metadata and reflect-metadata out of the browser bundle\nimport { getKeys } from '../util/object.util.js';\nimport { kebabCase } from '../util/string.util.js';\n\ntype RouteShape = {\n readonly method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\n readonly path: '' | `/${string}`;\n};\n\n/**\n * Single source of truth for the CRUD-over-HTTP surface, shared by server adapters and the browser client.\n * Keys are constrained to {@link UniversalQuerier} method names, so renaming a querier method\n * (or routing a non-existent one) is a compile error.\n */\nexport const CRUD_ROUTES = {\n findMany: { method: 'GET', path: '' },\n findOne: { method: 'GET', path: '/one' },\n count: { method: 'GET', path: '/count' },\n findOneById: { method: 'GET', path: '/:id' },\n insertOne: { method: 'POST', path: '' },\n insertMany: { method: 'POST', path: '/many' },\n saveOne: { method: 'PUT', path: '' },\n saveMany: { method: 'PUT', path: '/many' },\n updateMany: { method: 'PATCH', path: '' },\n updateOneById: { method: 'PATCH', path: '/:id' },\n deleteOneById: { method: 'DELETE', path: '/:id' },\n deleteMany: { method: 'DELETE', path: '' },\n} as const satisfies Partial<Record<keyof UniversalQuerier, RouteShape>>;\n\nexport type CrudOperation = keyof typeof CRUD_ROUTES;\n\nexport type CrudRoute = (typeof CRUD_ROUTES)[CrudOperation];\n\n/**\n * `QUERY` (RFC 10008) is an alternate transport for the read operations: same semantics as the\n * GET routes, but the JSON query travels in the request body instead of the query string,\n * avoiding URL-length limits for large queries.\n */\nexport type HttpMethod = CrudRoute['method'] | 'QUERY';\n\nconst CRUD_OPS = getKeys(CRUD_ROUTES);\n\n// derived from CRUD_ROUTES (the literal-path GET routes) so the sub-paths live in exactly one place\nconst QUERY_READ_OPS: ReadonlyMap<string, CrudOperation> = new Map(\n CRUD_OPS.filter((op) => CRUD_ROUTES[op].method === 'GET' && CRUD_ROUTES[op].path !== '/:id').map((op) => [\n CRUD_ROUTES[op].path,\n op,\n ]),\n);\n\n/**\n * URL segment for an entity, e.g. `entityPath(UserProfile) === 'user-profile'`.\n */\nexport function entityPath<E>(entity: Type<E>): string {\n return kebabCase(entity.name);\n}\n\nexport type RouteMatch = {\n readonly op: CrudOperation;\n /**\n * the resolved transport method — differs from the op's canonical route method for QUERY.\n */\n readonly method: HttpMethod;\n readonly id?: string;\n};\n\n/**\n * Resolve a (method, sub-path) pair to a CRUD operation. Literal sub-paths win over `:id`.\n */\nexport function matchRoute(method: string, subPath: string | undefined): RouteMatch | undefined {\n const raw = method.toUpperCase();\n const literal = subPath === undefined ? '' : `/${subPath}`;\n if (raw === 'QUERY') {\n const op = QUERY_READ_OPS.get(literal);\n return op ? { op, method: 'QUERY' } : undefined;\n }\n // HEAD reads like GET per HTTP semantics; the server runtime omits the response body\n const verb = raw === 'HEAD' ? 'GET' : raw;\n let idOp: CrudOperation | undefined;\n for (const op of CRUD_OPS) {\n const route = CRUD_ROUTES[op];\n if (route.method !== verb) {\n continue;\n }\n if (route.path === literal) {\n return { op, method: route.method };\n }\n if (route.path === '/:id') {\n idOp = op;\n }\n }\n return idOp && subPath !== undefined ? { op: idOp, method: CRUD_ROUTES[idOp].method, id: subPath } : undefined;\n}\n\nexport type RequestSuccessResponse<E> = {\n data: E;\n count?: number;\n};\n\nexport type RequestErrorResponse = {\n readonly error: {\n readonly message: string;\n readonly code: number;\n };\n};\n\n/**\n * Map a thrown error to the wire error envelope. Honors a numeric `status` on the error\n * (e.g. hooks throwing 403), defaults to 500; `code` mirrors the HTTP status.\n */\nexport function toErrorResponse(err: unknown): { status: number; body: RequestErrorResponse } {\n const status = err instanceof Error && 'status' in err && typeof err.status === 'number' ? err.status : 500;\n const message = err instanceof Error ? err.message : 'Internal Server Error';\n return { status, body: { error: { message, code: status } } };\n}\n",
|
|
10
|
+
"import type { Query } from '../type/index.js';\n// specific util module (not the barrel) to keep reflect-metadata out of the browser bundle\nimport { getKeys } from '../util/object.util.js';\n\nconst JSON_QUERY_KEYS = ['$select', '$populate', '$exclude', '$where', '$sort'] as const;\n\n/**\n * Parse raw query-string entries (with JSON-stringified values) into a UQL query object.\n * Symmetric counterpart of {@link stringifyQuery}.\n */\nexport function parseQueryParams(params: Record<string, unknown> = {}): Query<unknown> {\n const query: Record<string, unknown> = { ...params };\n\n for (const key of JSON_QUERY_KEYS) {\n const value = query[key];\n if (typeof value === 'string') {\n try {\n query[key] = JSON.parse(value);\n } catch {\n throw Object.assign(new SyntaxError(`invalid JSON in '${key}'`), { status: 400 });\n }\n }\n }\n\n query['$where'] ??= {};\n\n if (query['$skip']) {\n query['$skip'] = Number(query['$skip']);\n }\n if (query['$limit']) {\n query['$limit'] = Number(query['$limit']);\n }\n\n return query as Query<unknown>;\n}\n\n/**\n * Serialize a UQL query object into a percent-encoded query string where object values\n * are JSON-stringified. Symmetric counterpart of {@link parseQueryParams}.\n */\nexport function stringifyQuery(query?: Record<string, unknown>): string {\n if (!query) {\n return '';\n }\n const params = new URLSearchParams();\n for (const key of getKeys(query)) {\n const value = query[key];\n if (value === undefined) {\n continue;\n }\n params.append(key, typeof value === 'object' && value !== null ? JSON.stringify(value) : String(value));\n }\n const qs = params.toString();\n return qs ? `?${qs}` : '';\n}\n",
|
|
11
|
+
"import { CRUD_ROUTES, entityPath, type HttpMethod, type RequestSuccessResponse } from '../../http/contract.js';\nimport { stringifyQuery } from '../../http/query.js';\nimport type { IdValue, Query, QueryOne, QueryOptions, QuerySearch, Type, UpdatePayload } from '../../type/index.js';\nimport { get, query as httpQuery, patch, post, put, remove } from '../http/index.js';\nimport type { ClientQuerier, RequestFindOptions, RequestOptions } from '../type/index.js';\n\nexport type HttpQuerierDefaults = {\n /**\n * headers sent with every request from this instance, merged under per-call headers.\n * Create one instance per request (e.g. during SSR) to scope auth headers safely.\n */\n readonly headers?: Record<string, string>;\n /**\n * transport for read queries (findOne, findMany, count). 'QUERY' (RFC 10008) sends the\n * JSON query in the request body, avoiding URL-length limits for large queries; requires\n * infrastructure (proxies, CDNs) that forwards the QUERY method. Defaults to 'GET'.\n */\n readonly readMethod?: Extract<HttpMethod, 'GET' | 'QUERY'>;\n};\n\nexport class HttpQuerier implements ClientQuerier {\n constructor(\n readonly basePath: string,\n readonly defaults: HttpQuerierDefaults = {},\n ) {}\n\n findOneById<E>(\n entity: Type<E>,\n id: IdValue<E>,\n q?: QueryOne<E>,\n opts?: RequestOptions,\n ): Promise<RequestSuccessResponse<E | undefined>> {\n const basePath = this.getBasePath(entity);\n const qs = stringifyQuery(q);\n return get<E | undefined>(`${basePath}/${id}${qs}`, this.buildOptions(opts));\n }\n\n findOne<E>(entity: Type<E>, q: QueryOne<E>, opts?: RequestOptions): Promise<RequestSuccessResponse<E | undefined>> {\n return this.read<E | undefined>(`${this.getBasePath(entity)}${CRUD_ROUTES.findOne.path}`, q, opts);\n }\n\n findMany<E>(entity: Type<E>, q: Query<E>, opts?: RequestFindOptions) {\n const data: Query<E> & { count?: boolean } = { ...q };\n if (opts?.count) {\n data.count = true;\n }\n return this.read<E[]>(this.getBasePath(entity), data, opts);\n }\n\n findManyAndCount<E>(entity: Type<E>, q: Query<E>, opts?: RequestFindOptions) {\n return this.findMany(entity, q, { ...opts, count: true });\n }\n\n count<E>(entity: Type<E>, q: QuerySearch<E>, opts?: RequestOptions) {\n return this.read<number>(`${this.getBasePath(entity)}${CRUD_ROUTES.count.path}`, q, opts);\n }\n\n insertOne<E>(entity: Type<E>, payload: E, opts?: RequestOptions) {\n const basePath = this.getBasePath(entity);\n return post<IdValue<E>>(basePath, payload, this.buildOptions(opts));\n }\n\n insertMany<E>(entity: Type<E>, payload: E[], opts?: RequestOptions) {\n const basePath = this.getBasePath(entity);\n return post<IdValue<E>[]>(`${basePath}${CRUD_ROUTES.insertMany.path}`, payload, this.buildOptions(opts));\n }\n\n updateOneById<E>(entity: Type<E>, id: IdValue<E>, payload: UpdatePayload<E>, opts?: RequestOptions) {\n const basePath = this.getBasePath(entity);\n return patch<number>(`${basePath}/${id}`, payload, this.buildOptions(opts));\n }\n\n updateMany<E>(entity: Type<E>, q: QuerySearch<E>, payload: UpdatePayload<E>, opts?: RequestOptions) {\n const basePath = this.getBasePath(entity);\n const qs = stringifyQuery(q);\n return patch<number>(`${basePath}${qs}`, payload, this.buildOptions(opts));\n }\n\n saveOne<E>(entity: Type<E>, payload: E, opts?: RequestOptions) {\n const basePath = this.getBasePath(entity);\n return put<IdValue<E>>(basePath, payload, this.buildOptions(opts));\n }\n\n saveMany<E>(entity: Type<E>, payload: E[], opts?: RequestOptions) {\n const basePath = this.getBasePath(entity);\n return put<IdValue<E>[]>(`${basePath}${CRUD_ROUTES.saveMany.path}`, payload, this.buildOptions(opts));\n }\n\n deleteOneById<E>(entity: Type<E>, id: IdValue<E>, opts: QueryOptions & RequestOptions = {}) {\n const basePath = this.getBasePath(entity);\n const qs = opts.softDelete ? stringifyQuery({ softDelete: opts.softDelete }) : '';\n return remove<number>(`${basePath}/${id}${qs}`, this.buildOptions(opts));\n }\n\n deleteMany<E>(entity: Type<E>, q: QuerySearch<E>, opts: QueryOptions & RequestOptions = {}) {\n const basePath = this.getBasePath(entity);\n const qs = stringifyQuery(opts.softDelete ? { ...q, softDelete: opts.softDelete } : q);\n return remove<number>(`${basePath}${qs}`, this.buildOptions(opts));\n }\n\n getBasePath<E>(entity: Type<E>) {\n return `${this.basePath}/${entityPath(entity)}`;\n }\n\n protected read<T>(path: string, q: Record<string, unknown> | undefined, opts?: RequestOptions) {\n if (this.defaults.readMethod === 'QUERY') {\n return httpQuery<T>(path, q ?? {}, this.buildOptions(opts));\n }\n return get<T>(`${path}${stringifyQuery(q)}`, this.buildOptions(opts));\n }\n\n protected buildOptions<O extends RequestOptions>(opts?: O): O | undefined {\n if (!this.defaults.headers && !opts?.headers) {\n return opts;\n }\n return { ...(opts as O), headers: { ...this.defaults.headers, ...opts?.headers } };\n }\n}\n",
|
|
12
|
+
"import { HttpQuerier } from './querier/httpQuerier.js';\nimport type { ClientQuerier, ClientQuerierPool } from './type/index.js';\n\nlet defaultPool: ClientQuerierPool = {\n getQuerier: () => new HttpQuerier('/api'),\n};\n\nexport function setQuerierPool<T extends ClientQuerierPool>(pool: T) {\n defaultPool = pool;\n}\n\nexport function getQuerierPool(): ClientQuerierPool {\n return defaultPool;\n}\n\nexport function getQuerier(): ClientQuerier {\n return getQuerierPool().getQuerier();\n}\n"
|
|
13
|
+
],
|
|
14
|
+
"mappings": "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",
|
|
15
|
+
"debugId": "6FE96F1E0134475464756E2164756E21",
|
|
16
|
+
"names": []
|
|
17
|
+
}
|